0

我有以下问题:我的应用程序使用了一个执行所有 HTTP 调用的函数。作为快速修复,我想在有ConnectionTimeout.

问题是这个 executeHttp() 是从几个调用的AsyncTasks,我不知道如何获得所需的context.

我读了一些关于runOnUiThread但这似乎对我不起作用......

有任何想法吗?

谢谢!

更新:

我想要一个可以在我的executeHttp()函数中使用的解决方案,因为否则我确实在 100 个不同的地方添加了这个代码......这可能吗?

4

1 回答 1

4

首先,实现一个方法来向您的活动显示 Toast:

class MyActivity extends Activity {
// some stuff

    public void showToast(String text, int duration) {
        Toast toast = Toast.makeText(this.getBaseContext(), text, duration);
        toast.show();
    }
}

让您的 AsyncTask 持有对 activty 的引用,然后可以在 onProgressUpdate 方法中调用该引用:

class MyAsyncTask extends AsyncTask {

    MyActivity activity;

    public MyAsyncTask(MyActivity a)
        this.activity = a;
    }

    @Override
    protected Object doInBackground(String... params) {
        try {       
            // do your stuff here

        } catch (ConnectionTimeoutException e) {
            publishProgress("timeout");
    }

    @Override
    protected void onProgressUpdate(String... values) {
        if(values[0].equals("timeout")
            activity.showToast("Ups, we have a timeout!", Toast.LENGTH_LONG); }
        }
    }
}

编辑 - - - - - -

如果你想在你的 executeHttp() 方法中使用它,你必须将 Context 传递给它以显示 Toast:

public ReturnValue executeHttp(Context context) {
    try {
        // ...
    } catch(ConnectionTimeoutException e) {
        Toast t = Toast.makeToast(context, message, duration);
        t.show();
    }
}

摘要:没有可用的上下文->没有吐司

于 2013-05-29T08:06:24.730 回答