Android:Http请求不';我不能在4.0上工作
我测试了这段代码,它在2.2和2.3.3上运行良好,但在4.0上崩溃 问题似乎出在http请求上。你知道为什么吗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
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
}
}