问题描述
- Android: Http request 不能在 4.0上运行
-
我在 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()); }
解决方案
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
}
}
解决方案二:
android后面在主线程中都不应该进行耗时的网络操作,应该另开线程来处理这个问题,否则主线程会出现ANR的
解决方案三:
在Android4.0以后,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错
解决办法是用handler和new thread来结合
解决方案四:
采用异步进行操作吧,所有与UI相关的数据交互操作,都应该采用异步,能带来良好的用户体验。
解决方案五:
采用异步进行操作吧,所有与UI相关的数据交互操作,都应该采用异步,能带来良好的用户体验。推荐你采用github上比较流行的HTTP框架:android-async-http,里面有源码解释。
解决方案六:
不要在ui线程中,做网络连接这样的费时任务,会报错的,看log应该有提示。
时间: 2024-07-29 04:36:56