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

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

我使用了 AsyncTask 但发生了 NetworkOnMainThreadException

在主 Activity 中不允许将 AsyncTask 作为内部类吗? (我在 http://developer.android.com/training/basics/network-ops/connecting.html 中举了一个例子)

有什么问题?

最佳答案

I used AsyncTask but NetworkOnMainThreadException occurs.

因为您正在通过创建 InitTask 类对象来调用 doInBackground 方法。

要在其他Thread中执行doInBackground方法调用task.execute()方法启动AsyncTask并使用onPostExecutedoInBackground 方法执行完成时显示 Toast 消息的方法:

 @Override
   protected void onPostExecute(String result) {
              Toast.makeText(getApplicationContext(),
               "Task Completed!", Toast.LENGTH_LONG).show();   
   }

关于java - 如何使用 AsyncTask 在 Android 中连接到网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28092609/

相关文章:

java - 使用 Hamcrest 映射相等

java - 在 UML 中,是否包含方法中定义的变量?

java - 可以将图像作为 ByteBuffer 发送到我的 Servlet 吗?

java - Android Architecture Blueprints "todo‑mvp‑dagger",@Provides for TasksRepository 在哪里?

java - Twitter4J.Status 与 android.os.AsyncTask.Status 冲突?

java - BufferedInputStream 和 BufferedOutputstream 与 InputStream 和 Outputstream 有区别吗

Java:线程安全的 RandomAccessFile

android - 如何在Android上绘制音频波形

android - Realm 无法在新线程中执行 executeTransaction

android - 使用 Asynctask 从 internalStorage 加载 recyclerView 中的位图