【问题标题】:onPostExecute not allowing me to create Toast messageonPostExecute 不允许我创建 Toast 消息
【发布时间】:2013-05-19 08:38:58
【问题描述】:

有关上下文,请参阅此之前:Anonymous Uploading File object to Imgur API (JSON) gives Authentication Error 401(它有 doInBackground() 方法的代码,以防有人感兴趣)

使用 AsyncTask 类,我将图像上传到 Imgur。上传过程在 doInBackground() 方法中完成。它返回字符串链接到 onPostExecute,它应该以 Toast 消息的形式显示链接。

@Override
protected void onPostExecute(String result) 
{
    super.onPostExecute(result);
    Toast.makeText(getApplicationContext(), "Uploaded! Link: " + result, Toast.LENGTH_SHORT).show();
}

但是,这样做会产生以下错误:

方法 getApplicationContext() 没有为 UploadToImgurTask 类型定义

尝试将返回字符串复制到剪贴板会出现类似问题。

@Override
protected void onPostExecute(String result) 
{
    super.onPostExecute(result);
    ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); 
    ClipData clip = ClipData.newPlainText("label", "Text to copy");
    clipboard.setPrimaryClip(clip);
}

方法 getSystemService(String) 未定义 UploadToImgurTask 类型

【问题讨论】:

  • 使用活动上下文代替 getApplicationContext()。如果 asynctask 不是 Activity 的内部类,则将上下文传递给 asynctask 的构造函数。使用上下文显示 toast
  • 你能演示一下吗?

标签: java android android-asynctask clipboard imgur


【解决方案1】:

试试这个代码

public static void pushprofList(Activity context){
 static Context = mConext;

protected void onPostExecute(String result) {

      Toast toast=Toast.makeText(mConext,"Succefully Updated Profile",Toast.LENGTH_LONG);
             toast.show();

    }
  }

这完全工作并显示吐司消息。

【讨论】:

    【解决方案2】:

    如果它从 Activity 扩展,则使用 AsyncTask 的父类名称和“.this”代替 getApplicationContext(),例如 MyActivity.this 否则使用 getActivity()。希望你的问题能得到解决

    【讨论】:

    • 或者只是扩展Activity
    【解决方案3】:

    @Raghunandan 是对的。因此,在您的 UploadToImgurTask 类中,您可以拥有:

    private Context context;
    //in constructor:
    public UploadToImgurTask(Context context){
            this.context=context;
    }
    

    然后在onPostExecute你可以简单地使用:

    Toast.makeText(context, "Uploaded! Link: " + result, Toast.LENGTH_SHORT).show();
    

    希望这对您有所帮助。

    【讨论】:

    • 效果很好!感谢你们俩。还有一个问题:我用于将链接复制到系统剪贴板的代码在 onPostExecute 中不起作用。一直说没有为 UploadToImgurTask 定义 getSystemService。 :(
    • 再次说明 getSystemService() 是一个 Context 方法,所以你需要一个上下文对象的引用。您可以尝试使用context.getSystemService()。希望这行得通。
    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多