我编写如下代码以连接Android中的网络
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitTask task = new InitTask();
Toast.makeText(getApplicationContext(), task.doInBackground(), Toast.LENGTH_LONG).show();
}
private class InitTask extends AsyncTask<Void, Void, String>{
protected String doInBackground(Void... p){
// Do network thing...
return str;
}
}
}
我使用AsyncTask
但NetworkOnMainThreadException
出现了。
是否允许将AsyncTask作为主要活动中的内部类? (我在http://developer.android.com/training/basics/network-ops/connecting.html)
中举了一个例子有什么问题?
答案 0 :(得分:2)
我使用AsyncTask但发生了NetworkOnMainThreadException。
因为您通过创建doInBackground
类对象来调用InitTask
方法。
在其他线程调用doInBackground
方法中执行task.execute()
方法以启动AsyncTask
并使用onPostExecute
方法在doInBackground
方法执行完成时显示Toast消息:
@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(),
"Task Completed!", Toast.LENGTH_LONG).show();
}
答案 1 :(得分:1)
调用.doInBackground(),你必须通过.execute(params)执行任务;
答案 2 :(得分:1)
以上所有答案大致正确但没有一个是准确的。您需要执行的唯一代码行是这个。
new InitTask().execute();
无论何时何地执行后台任务,都要执行此操作。
还可以看一下官方的android guide。
我希望这能回答你的问题。