如何使用AsyncTask在Android中连接到网络

时间:2015-01-22 15:31:33

标签: java android android-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;
        }
    }
}

我使用AsyncTaskNetworkOnMainThreadException出现了。

是否允许将AsyncTask作为主要活动中的内部类? (我在http://developer.android.com/training/basics/network-ops/connecting.html

中举了一个例子

有什么问题?

3 个答案:

答案 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。 我希望这能回答你的问题。