Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android通知意图使用旧上下文_Android_Android Intent_Android Asynctask_Notifications - Fatal编程技术网

Android通知意图使用旧上下文

Android通知意图使用旧上下文,android,android-intent,android-asynctask,notifications,Android,Android Intent,Android Asynctask,Notifications,我正在编写一个小的图像上传应用程序,它使用AsyncTask上传并通知用户上传是否完成 上传完成后,我想使用AsyncTask线程中的“onPostExecute”方法更新UI。如果您单击通知,它将引导用户进入主要活动,在那里您可以看到所有上传的图片(也是最新的图片) 为此,我在“onPreExecute”方法中创建通知,并打算返回: 在创建AsyncTask对象时,将传递使用的上下文: 新的ImageUploader(getApplicationContext()).execute((getR

我正在编写一个小的图像上传应用程序,它使用AsyncTask上传并通知用户上传是否完成

上传完成后,我想使用AsyncTask线程中的“onPostExecute”方法更新UI。如果您单击通知,它将引导用户进入主要活动,在那里您可以看到所有上传的图片(也是最新的图片)

为此,我在“onPreExecute”方法中创建通知,并打算返回:

在创建AsyncTask对象时,将传递使用的上下文:

新的ImageUploader(getApplicationContext()).execute((getRealPathFromURI())

上传完成后,我将更改通知文本并更新UI(目前只有一个TextView进行测试):

这很好,在“onPostExecute”-方法完成后,我的活动中有更新的文本,在栏中有“Upload complete!”通知

现在我的问题开始了:如果我现在单击,我的通知会打开应用程序,但会使用旧的上下文文本/UI。这意味着我更新的UI文本将消失,并替换为旧文本

例如:

  • 启动应用程序,文本为:“占位符文本”
  • 开始上传,上传完成后,文本为:“url:www.website.de/img.png”
  • 单击通知:打开活动,文本再次为:“占位符文本”

  • 我的想法:这是因为返回的意图是使用我在更改UI之前设置的“旧”活动上下文。但我不知道如何解决这个问题。更新UI后,是否可以在“onPostExecute”方法中设置Resultent和TaskStackBuilder?

    我假设在您选择通知时正在创建
    MainActivity
    的新实例。您可以通过在
    MainActivity
    onCreate()
    中添加一些日志来验证这一点。如果您只想将现有的应用程序放到前台,那么可以查看。我也不知道为什么要使用
    TaskStackBuilder
    ,因为您没有构建后台堆栈(包含多个活动)。你可以使用
    pendingent.getActivity()
    来实现这个目的。我会看看你的答案,我对通知不熟悉,所以我使用了使用TaskStackBuilder的google开发者教程。
     @Override
        protected void onPreExecute() {
            mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            mBuilder = new NotificationCompat.Builder(context)
            .setContentTitle("ImageUpload")
            .setContentText("Uploading in progress")
            .setSmallIcon(R.drawable.ic_launcher);
            mBuilder.setProgress(0, 0, true);
            mBuilder.setAutoCancel(true);
            Intent resultIntent = new Intent(context, MainActivity.class);
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent =
                    stackBuilder.getPendingIntent(
                        0,
                        PendingIntent.FLAG_UPDATE_CURRENT
                    );
            mBuilder.setContentIntent(resultPendingIntent);
            mNotifyManager.notify(NOTIFICATION_ID, mBuilder.build());
    
        }
    
        @Override
        protected void onPostExecute(String result) {           
            if(result == null) {
                setNotificationFinshedText("A error occured during the Upload");
            } else {
                setNotificationFinshedText("Upload complete!");
                txt.setText(result);
            }
        }