0

在我的 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) { // Do stuff 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
}

谢谢!

4

1 回答 1

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();
}
于 2012-09-26T10:14:47.750 回答