解决方案 »

  1.   

    我的servlet是用MyEclipse写的,android是用Eclipse写的,这个应该没问题吧
      

  2.   

    android4.0以后联网操作要放到子线程中
      

  3.   

    异步加载,android4.0以后是对android上网进行了相关要求
      

  4.   

    我把联网操作改到了子线程中:public class MainActivity extends Activity {
    TextView textView = null;
    Button btn = null;
    String result = "";
    Handler handler = null;
    protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState); 
                    setContentView(R.layout.activity_main); 
            init();        
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
    void btnclick(){
    new Thread(){
    @Override
    public void run() {
    get();
    handler.post(runnableUi);
    }
    }.start();
    }
    void init(){
    textView = (TextView)findViewById(R.id.result);
    btn = (Button)findViewById(R.id.button);
    handler = new Handler();
    btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
    btnclick();
    }
    });
    }
    void get(){
    /*
     * 用Get方式向服务器发送数据
     */
    String strUrl = "http://61.132.138.212:8080/AndroidJEEServlet/ServletTest?param=helloMK";
    URL url = null;
    try{
    url = new URL(strUrl);
    HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
    Log.e("3","MK");
    InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
    Log.e("4","MK");
    BufferedReader bufferedReader = new BufferedReader(in);
    String readline = null;
    while((readline = bufferedReader.readLine())!=null)
    {
    result += readline;
    }
    in.close();
    urlConn.disconnect();
    }catch(Exception e){
    textView.setText("连接超时");
    }
    }
    //ui的更新必须在主线程中,而handler则可以在子线程将这个Runable post过去执行,及实现了在子线程中更新ui。
    Runnable runnableUi = new Runnable() {
    @Override
    public void run() {
    textView.setText(result);
    }
    };
    }但是在log打印出3之后就又没有反应了,但是这次并没有出现才catch异常中的“连接超时”
    您能否帮我看一下是不是代码哪里有问题?
      

  5.   

    我把联网操作放入了子线程中,但是仍然在log打印3之后没有了反应,您能否帮我看一下是为何?
      

  6.   

    我把联网操作放入了子线程中,但是仍然在log打印3之后没有了反应,您能否帮我看一下是为何?我只想说句,这不是子线程这还是绑定在主线程吧,把thread里面的(Runnable)单独写成一个java文件吧,,,
      

  7.   

    我只想说,单步调试看看报什么错,估计是没写权限。PS:catch里不能那么写,子线程中不能直接操作ui。
      

  8.   

    其实还有个办法,在oncreate下面加入StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()       
            .detectDiskReads()       
            .detectDiskWrites()       
            .detectNetwork()   // or .detectAll() for all detectable problems       
            .penaltyLog()       
            .build());       
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()       
            .detectLeakedSqlLiteObjects()    
            .penaltyLog()       
            .penaltyDeath()       
            .build());  百试不爽