Java android.os.NetworkOnMainThreadException的替代解决方案
现在我正在解决这个问题 android.os.NetworkOnMainThreadException 我将connect方法放入分离的线程中,但是当线程启动时,Java android.os.NetworkOnMainThreadException的替代解决方案,java,android,exception-handling,Java,Android,Exception Handling,现在我正在解决这个问题 android.os.NetworkOnMainThreadException 我将connect方法放入分离的线程中,但是当线程启动时,start()方法不会调用Run(), -同时使用AsyncTask,任务不会调用doInBackground()方法 //对于异步任务,我的代码是 //对于线程,我的代码是:- ->在主要活动中 您的错误可能是因为您在UI线程上执行了一些网络操作,这是api11不允许的。我想说的是,不要创建单独的线程,只需使用异步任务类来执行网
start()
方法不会调用Run()
,
-同时使用AsyncTask
,任务不会调用doInBackground()
方法
//对于异步任务,我的代码是
//对于线程,我的代码是:-
->在主要活动中
您的
错误
可能是因为您在UI
线程
上执行了一些网络
操作,这是api11
不允许的。我想说的是,不要创建单独的线程
,只需使用异步任务
类来执行网络
操作。只需在doInBackground()
中执行网络操作,并从UI线程调用AsyncTask类,如下所示:
new YourAsyncTask().execute(url);
通过创建一个独立的线程
类并使其更加复杂,这一切都不需要花费太多精力。感谢“Lalit Poptani”的回复,但实际上我做到了您所说的,并且execute函数没有调用“doInBackGround()”方法。
URL url = null;
try {
url = new URL("http://www.flickr.com/photos/51469488@N03/");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ConnectTask backgroundTask = (ConnectTask) new ConnectTask();
backgroundTask.setActivity(this);
backgroundTask.execute(url);
public class ConnectThread extends Thread {
HttpEntity entity;
String statue;
LogInJSONActivity mainActivity;
@Override
public void run() {
// TODO Auto-generated method stub
mainActivity.setString("Inside Run");
entity = connect("http://www.flickr.com/photos/51469488@N03/");
mainActivity.setHttp(entity);
super.run();
}
public HttpEntity connect(String url) {
statue= "Inside Connect";
HttpClient httpclient = new DefaultHttpClient();
// Prepare a request object
HttpGet httpget = new HttpGet(url);
// Execute the request
HttpResponse response;
HttpEntity entity = null;
try {
response = httpclient.execute(httpget);
entity = response.getEntity();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(entity !=null)
System.out.print("Valid Entity");
else
System.out.print("Null Entity");
return entity;
}
public void setActivity(LogInJSONActivity act){
mainActivity = act;
}
}
ConnectThread t = new ConnectThread();
t.setActivity(this);
t.start();
new YourAsyncTask().execute(url);