-1

我已经编写了适用于 Android 2.2 API 的代码,但它不适用于 Android 4.0

 String url = textUrl.getText().toString();
     HttpClient client = new DefaultHttpClient();
     HttpGet  request = new HttpGet(url);
     try
     {
        HttpResponse response = client.execute(request);
        textResult.setText(HttpHelper.request(response));
     }
     catch (Exception e) {
        // TODO: handle exception
         textResult.setText("Failed");
    }
4

3 回答 3

1

Internet 通信必须在单独的线程中运行。

使用AsyncTask来简化它。

您可以在此处阅读有关 Android 线程的更多信息

编辑:如果您真的想在主线程上访问互联网,您可以onCreate()使用以下代码在方法中允许它:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);

但是,我真的不推荐这种方法。

于 2012-08-30T09:31:05.233 回答
1

如果您从 android 2.x 中的主线程调用 URL,那么它将完美运行。

但是 HonyCumb 及其更高版本需要从工作线程发送调用 URL。

您可以为此使用AsyncTask

于 2012-10-17T07:53:51.613 回答
0

我遇到了同样的问题。解决方案非常简单:您必须使用 AsyncTaks。要实现它们,您可以简单地创建一个新类。体育:

public class AsynkTaskRequest extends AsyncTask<String, Void, String> {


    @Override
    protected String doInBackground(String... params) {
        String answer = null;

        for (String request : params) {
            //your code comes here
        }
    }
}

更多详情,随便搜一搜就找到了(“这次我找你了”)

编辑: 不要使用:

catch (Exception e) {
    // TODO: handle exception
     textResult.setText("Failed");
}

做它喜欢

catch (Exception e) {
    //if you use logcat in eclipse    
    Log.e("Request Error", e.getMessage());
    //else
    System.out.println(e.getMessage());     
}
于 2012-08-30T09:36:27.167 回答