Android:Http请求不';我不能在4.0上工作

Android:Http请求不';我不能在4.0上工作,android,httpwebrequest,compatibility,android-compatibility,Android,Httpwebrequest,Compatibility,Android Compatibility,我测试了这段代码,它在2.2和2.3.3上运行良好,但在4.0上崩溃 问题似乎出在http请求上。你知道为什么吗 public class Rezultat extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); //http p

我测试了这段代码,它在2.2和2.3.3上运行良好,但在4.0上崩溃

问题似乎出在http请求上。你知道为什么吗

public class Rezultat extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

    //http post
    InputStream is=null;
    try{

            String url="http://google.com";
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
    }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
    }
    //convert response to string
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();

            result=sb.toString();

    }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
    }
您正在主线程上执行(可能较慢)网络操作。如果目标SDK为11或更高,则会引发
NetworkOnMainThreadException
,因为此行为会阻止UI并导致应用程序无响应

您可以使用来绕过此问题,将数据加载到其
doInBackground(..)

您正在主线程上执行一个(可能很慢的)网络操作。如果目标SDK为11或更高,则会引发
NetworkOnMainThreadException
,因为此行为会阻止UI并导致应用程序无响应


您可以使用来绕过此问题,将数据加载到其
doInBackground(..)

当询问崩溃时,通常应该发布堆栈跟踪,但在这种情况下,您是在主UI线程上执行网络操作。不建议这样做,现在会引发异常。而是在另一个线程中执行,可能通过AsyncTask。

当询问崩溃时,通常应该发布堆栈跟踪,但在这种情况下,您是在主UI线程上执行网络操作。不建议这样做,现在会引发异常。而是在另一个线程中执行,可能通过AsyncTask。

e.printstacktrace()将告诉您:

当应用程序尝试执行异常时引发的异常 在其主线程上进行网络操作

这仅适用于针对蜂巢SDK或 较高的。允许针对早期SDK版本的应用程序执行以下操作 在他们的主事件循环线程上建立网络,但它非常复杂 气馁。有关响应性,请参阅文档设计

从URLTASK下载私有类扩展异步任务{
受保护的void onPreExecute(){
mDialog=ProgressDialog.show(ChartActivity.this,“请稍候…”,“正在检索数据…”,true);
}
受保护的字符串doInBackground(字符串…URL){
//你所有的网络资料都在这里。
返回结果
}
}
e.printstacktrace()将告诉您:

当应用程序尝试执行异常时引发的异常 在其主线程上进行网络操作

这仅适用于针对蜂巢SDK或 较高的。允许针对早期SDK版本的应用程序执行以下操作 在他们的主事件循环线程上建立网络,但它非常复杂 气馁。有关响应性,请参阅文档设计

从URLTASK下载私有类扩展异步任务{
受保护的void onPreExecute(){
mDialog=ProgressDialog.show(ChartActivity.this,“请稍候…”,“正在检索数据…”,true);
}
受保护的字符串doInBackground(字符串…URL){
//你所有的网络资料都在这里。
返回结果
}
}
private class DownloadFromUrlTask extends AsyncTask<String, Void, Bitmap> {

    protected void onPreExecute() {
        mDialog = ProgressDialog.show(ChartActivity.this,"Please wait...", "Retrieving data ...", true);
    }

    protected String doInBackground(String... urls) {
        //All your network stuff here.
        return result
    }
}