使用doInBackground时无法显示Toast(AsyncTask)

时间:2012-09-28 13:31:54

标签: android facebook android-asynctask toast

我正试图在facebook上发帖,所以我正在使用以下代码。它运作良好,但我似乎无法发布一个简单的确认吐司。

private class FacebookPoster extends AsyncTask<String, Object, Object>
    {

        @Override
        protected Object doInBackground(String... message)
        {
            Bundle parameters = new Bundle();
            parameters.putString("message", message[0]);
            parameters.putString("description", "topic share");
            parameters.putString("link", ctx.getResources().getString(R.string.rateLink));
            parameters.putString("picture", ctx.getResources().getString(R.string.linkIconPicture));
            Log.d("ERRRR", "set params");
            try
            {
                facebook.request("me");
                String response = facebook.request("me/feed", parameters, "POST");
                Log.d("Tests", "got response: " + response);
                if (response == null || response.equals("") || response.equals("false"))
                {
                    return "Blank response.";

                }
                else
                {
                    return "Message posted to your facebook wall!";

                }
            }
            catch (Exception e)
            {
                return "Failed to post to wall!";
            }
        }

        @Override
        protected void onProgressUpdate(Object... values)
        {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            showToast(values);

        }
    }

showToast功能

private void showToast(Object message)
    {
        Toast.makeText(ctx, message.toString(), Toast.LENGTH_SHORT).show();
    }

我认为没有调用onProgressUpdate。请帮忙。

4 个答案:

答案 0 :(得分:4)

onProgressUpdate用于更新您的进度条,例如代码仍在运行时,您需要使用onProgressUpdate方法调用publishProgress手册。

您正在doInBackground方法中返回一个字符串(Object)。此字符串将发送到onPostExecute方法。

所以你应该做的是删除onProgressUpdate方法,并覆盖onPostExecute方法并将Toast代码放在其中。

注意: onProgressUpdatepublishProgress只应在后台任务仍在运行时用于更新进度,而不是用于显示最终结果。对于最终结果,您使用onPostExecute方法。

http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:2)

当然没有调用onProgressUpdate。

你必须自己在doInBackground中调用它:

publishProgress(<somenumber>);

http://developer.android.com/reference/android/os/AsyncTask.html

答案 2 :(得分:1)

您需要在publishProgress()内拨打doInBackground()

答案 3 :(得分:0)

重写onPostExecute()方法并将调用移至showToast()该方法。

看起来你的onProgressUpdate()根本没有被调用。在你的场景中,你宁愿在doInBackground()完成后展示祝酒词。