2 o casper ne O_Casper_ne 于 2013.06.17 14:27 提问

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());
    }

6个回答

xiaoyan_12
xiaoyan_12   2013.06.18 16:59
已采纳
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
    }
}
owen19891030
owen19891030   2013.06.17 20:09

android后面在主线程中都不应该进行耗时的网络操作,应该另开线程来处理这个问题,否则主线程会出现ANR的

Jave_
Jave_   2013.06.17 15:38

在Android4.0以后,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错

解决办法是用handler和new thread来结合

mojieke
mojieke   2013.06.24 17:00

采用异步进行操作吧,所有与UI相关的数据交互操作,都应该采用异步,能带来良好的用户体验。

mojieke
mojieke   2013.06.24 17:01

采用异步进行操作吧,所有与UI相关的数据交互操作,都应该采用异步,能带来良好的用户体验。推荐你采用github上比较流行的HTTP框架:android-async-http,里面有源码解释。

aomandeshangxiao
aomandeshangxiao   2013.06.24 20:50

不要在ui线程中,做网络连接这样的费时任务,会报错的,看log应该有提示。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!