Android - 在 AsyncTask onPostExecute() 中设置的共享首选项并不总是设置?

2024-03-13

我有一些代码在 98% 的时间内有效,在我自己的测试中则为 100%,因此除了让用户设备遇到此问题之外,我无法真正重现该问题。

我在 onPostExecute() 中所做的是设置如下参数:

   SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( AddProblemActivity.this);
            prefs.edit().putString("recent_problem_id", result ).commit();

然后转到下一个活动:

            Intent myIntent = new Intent(AddProblemActivity.this, ProblemActivity.class);
            AddProblemActivity.this.startActivity(myIntent);

然后尝试像这样获取该参数:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( 
              ProblemActivity.this);         

    // display a loading message before problem loads.
    String recent_problem_id = prefs.getString( "recent_problem_id" , null );

    if ( recent_problem_id == null )
    {
        // Sometimes it is null!            
    }

有人知道为什么会发生这种情况吗?

Thanks!


如果您尝试将数据传递给新活动,为什么不将其作为 String extra 放入意图中呢?然后,从新活动的意图中获取该字符串。如果您仍然需要存储它,可以在新活动的 onCreate() 从意图中提取它后执行此操作。

Intent myIntent = new Intent(AddProblemActivity.this, ProblemActivity.class);
//Add results here
myIntent.putExtra("RecentProblemId", result);
AddProblemActivity.this.startActivity(myIntent);

然后,在新 Activity 的 onCreate 中,执行以下操作:

String recentProblemId = getIntent().getStringExtra("RecentProblemId");

现在,如果您仍然需要存储此信息,请执行以下操作:

if(recentProblemId != null){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( 
              ProblemActivity.this);         
    prefs.putString("recent_problem_id",recentProblemId).commit();
}

我知道这并不能完全回答您的问题,即为什么字符串并不总是被提交到 onPostExecute() 中的首选项。然而,在活动之间传递信息的最佳实践是通过 Intent 和 extra。

我的猜测是,为什么它可能并不总是适合某些用户,是因为他们的设备在新活动启动并尝试从同一文件中读取数据之前尚未完成将数据写入共享首选项文件。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 在 AsyncTask onPostExecute() 中设置的共享首选项并不总是设置? 的相关文章

随机推荐

  • 为什么Django的Meta是一个旧式类?

    我注意到在 Django 模型中 有一个class Meta这对模型做了一些额外的定义 我的问题是 为什么这是一个老式的课程 即不子类化object 这是有原因的还是这只是一种习俗 我可以在我的项目中将其作为新式课程吗 我相信没有真正的原因
  • UITableView 延迟图像加载,图像在表格停止滚动后出现

    我使用 NSUrlConnection 为 UITableView 实现了延迟图像加载 这一切都运行得非常好 当我打开桌子时 等待一秒钟 在 3G 上 我会自动获取图像 但是 当我滚动时 表格会加载新单元格 启动 NSURLConnecti
  • Neo4j - 按相关性排序

    我想按 Neo4j 中的相关性对返回的数据进行排序 就我的目的而言 相关性可以简化为 我正在搜索的单词的索引 其中索引越低 相关性越高 Example 我有这三个节点 node Label PROD properties name Bear
  • 使用 java 泛型迭代枚举值

    我试图找到一种在使用泛型时迭代枚举值的方法 不确定如何执行此操作或是否可能 下面的代码说明了我想要做的事情 注意代码T values 在以下代码中无效 public class Filter
  • Javascript:用户完成滚动后执行操作

    我正在想办法做到这一点 我有一个盒子清单 每个盒子都是关于150px高的 我正在使用 javascript 和 jquery 并希望在用户向下滚动页面后 页面将自动滚动 以便框与页面的其余部分对齐 也就是说 如果用户滚动并且 y页面位置不能
  • Spacy - 标记带引号的字符串

    我正在使用 spacy 2 0 并使用带引号的字符串作为输入 示例字符串 The quoted text AA XX should be tokenized 并期望提取 The quoted text AA XX should be tok
  • Aws ecs fargate ResourceInitializationError:无法提取机密或注册表身份验证

    我正在尝试在 aws ecs fargate 1 4 0 平台上运行私有存储库 对于私有存储库身份验证 我遵循了docs https docs aws amazon com AmazonECS latest developerguide p
  • 创建删除线文本?

    我可以在 Android 中创建删除线文本吗 我的意思是在TextView标签可以使这成为可能
  • SQL-Server 中的错误计算

    作为一个例子 我发现了一个简单的计算 例如 select cast 200 00 as float 1908 30 170 00 1150 00 1128 30 作为正常添加 这会导致0 00但 SQL Server 显示结果为2 2737
  • fitz.open() 在 for 循环中不起作用(FITZ、PYTHON、PYMUPDF)

    当我尝试使用 PyMuPDF 中的 fitz 迭代目录 PDFS 中的文件时 我遇到了困难 问题是 当我只是执行 document somepdf pdf 时 代码可以工作 但是一旦我插入 for 循环并尝试访问文件 就会出现此错误 文件名
  • Android 记录来电和去电

    我想了解是否有一种方法可以在 Android 手机 2 2 及更高版本上记录来电和去电 客户希望记录他们给客户拨打的代理电话 以便以后可以用来填写一些材料 他们不想让客户在接听电话时等待 而是希望稍后再做 这可能吗 我需要使用哪些 API
  • 如何配置IntelliJ 11 +远程tomcat 6 + maven导入模块?

    这是我现在所拥有的 将多个maven模块导入到IntelliJ项目中 Maven 目标从 Maven 项目弹出窗口运行正常 创建一个 war 文件 从 Build Make Project 创建项目也可以 但这里没有创建战争 只是创建 cl
  • myBatis 中 ArrayList 的类型处理程序

    我正在尝试为 ArrayList 编写类型处理程序 但这给了我错误任何人都可以帮助我 我想将 ArrayList 作为 VARCHAR 存储在数据库中并将其作为 ArrayList 检索 package com someweb typeha
  • 如何在容器中存储不同类型的模板化对象?

    假设我有一个vector or list或任何可能更适合这里的容器 我想将模板化类型的多个对象 或指针 存储在 std vector
  • SCNMaterialProperty不是渲染层

    当分配 AVPlayerLayer 时 SCNMaterialProperty 的内容属性在 SCNMaterial 上无法呈现 请注意 这只是物理设备上的问题 在模拟器 Xcode 6 0 1 上运行良好 我正在这样创建我的 SCNode
  • 在谷歌地图上显示多条路线

    我试图在同一张地图上显示多条路线 但无法这样做 无论我做什么 我都只能得到一条路线 function calcRoute var start document getElementById start value var end docum
  • 从字典中获取特定值

    如何从Python中的字典中获取特定的键 我有一本字典 dict redorange 1 blackhawak 2 garlicbread 3 我想获取其键名称中包含大蒜的键的值 我怎样才能实现它 让我们调用你的字典d print v fo
  • 将 nodemon 与 docker 和 docker-compose 结合使用

    我将 nodemon 与 docker compose 一起使用 这是我的 Dockerfile FROM node 10 WORKDIR usr src app COPY package json RUN npm install COPY
  • 如何从 Apache .htaccess 创建虚拟主机?

    我在用Apache 之友 XAMPP http www apachefriends org en xampp html在 Windows 本地服务器 中 我将虚拟主机设置为httpd vhosts conf在 Apache 配置目录中 如下
  • Android - 在 AsyncTask onPostExecute() 中设置的共享首选项并不总是设置?

    我有一些代码在 98 的时间内有效 在我自己的测试中则为 100 因此除了让用户设备遇到此问题之外 我无法真正重现该问题 我在 onPostExecute 中所做的是设置如下参数 SharedPreferences prefs Prefer