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