我应该如何重构我的代码以避免Android上的主线程网络异常?

时间:2012-09-26 10:10:52

标签: java android eclipse

在我的MainActivity中,我有一个类初始化,如下所示:

Presentation presentation = new Presentation("link");

Presentation是一个使用Web服务器上.JSON文件中的值进行初始化的类:

public Presentation(String URL) {
    // Do stuff
    doNetworking();
}
private doNetworking() {
    // Network access here
    // This throws the Network on Main Thread exception
}

在我的MainActivity中,我需要在下一步中使用Presentation的所有值:

Presentation presentation = new Presentation();
// Do some stuff with it

使用AsyncTask我不知道我应该怎么做,到目前为止我有这样的事情:     public Presentation(String URL){         // 做东西         new InitializePresentation()。execute(URL);     }

private class InitializePresentation extends AsyncTask<String, Void, Boolean> {
    // Amongst other things
    protected Boolean doInBackground(String... params) {
        // Do the networking stuff here
    }
}

我需要的是重构这段代码,使其异步,但行为类似于同步调用。非常感谢任何帮助。

修改的 如何重构代码来完成此任务?

Bitmap b = new Bitmap();
Load bitmap from network;
Use bitmap in imageview;

这可以用这种方式吗?或者我必须像

一样使用它
Async, doInBackground() {
   Load bitmap from network
   Use bitmap in imageview
   Continue with application
}

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在执行网络工作时显示进度对话框:

private ProgressDialog progressDialog;
private Context context;

public InitializePresentation (Context context) {
    this.context = context;
}

@Override
protected void onPreExecute() {
    progressDialog = ProgressDialog.show(context, "", "loading", true);
}

/* 
 * @see android.os.AsyncTask#doInBackground(Params[])
 */
@Override
protected String doInBackground(String... arg0) {
    // Do the networking stuff here
}

@Override
protected void onPostExecute(final String result) {
    progressDialog.dismiss();
}