如何使用 AsyncTask 连接到 Android 中的网络
How to connect to network in Android using AsyncTask
我在 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
。
在main activity 中不允许将AsyncTask 设为inner class 吗? (我在http://developer.android.com/training/basics/network-ops/connecting.html中举了个例子)
有什么问题?
是调用.doInBackground(),你必须通过.execute(params);
执行任务
I used AsyncTask but NetworkOnMainThreadException occurs.
因为您正在通过创建 InitTask
class 对象来调用 doInBackground
方法。
在其他线程中执行doInBackground
方法调用task.execute()
方法启动AsyncTask
并在doInBackground
方法执行时使用onPostExecute
方法显示Toast消息完成:
@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(),
"Task Completed!", Toast.LENGTH_LONG).show();
}
以上所有答案都大致正确,但 none 是准确的。您需要执行的唯一代码行就是这一行。
new InitTask().execute();
随时随地执行此操作,以执行后台任务。
也可以看看官方 android guide。
我希望这能回答你的问题。
我在 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
。
在main activity 中不允许将AsyncTask 设为inner class 吗? (我在http://developer.android.com/training/basics/network-ops/connecting.html中举了个例子)
有什么问题?
是调用.doInBackground(),你必须通过.execute(params);
执行任务I used AsyncTask but NetworkOnMainThreadException occurs.
因为您正在通过创建 InitTask
class 对象来调用 doInBackground
方法。
在其他线程中执行doInBackground
方法调用task.execute()
方法启动AsyncTask
并在doInBackground
方法执行时使用onPostExecute
方法显示Toast消息完成:
@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(),
"Task Completed!", Toast.LENGTH_LONG).show();
}
以上所有答案都大致正确,但 none 是准确的。您需要执行的唯一代码行就是这一行。
new InitTask().execute();
随时随地执行此操作,以执行后台任务。
也可以看看官方 android guide。
我希望这能回答你的问题。