我有以下问题:我的应用程序使用了执行所有HTTP调用的函数。作为快速解决方案,我想在出现ConnectionTimeout时向用户显示敬酒消息。

问题在于,该executeHttp()是从多个AsyncTasks调用的,我不知道如何获取所需的context

我读了一些有关runOnUiThread的内容,但这似乎对我也不起作用...

有任何想法吗?

谢谢!

更新:

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

最佳答案

首先,实现一种方法向您的活动展示敬酒:

class MyActivity extends Activity {
// some stuff

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


让您的AsyncTask持有对活动的引用,然后可以在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();
    }
}


摘要:无可用上下文->无吐司

07-24 09:25