【问题标题】:My sharedPreference always returns default value我的 sharedPreference 总是返回默认值
【发布时间】:2021-04-19 13:02:31
【问题描述】:

我知道这个问题被问了很多次,很抱歉重复了一遍,但我根本不知道该怎么做。

我正在使用 Glide 将图像从服务器加载到我的 RecycleView 并且它是侦听器,所以当我的图像加载时,它应该保存 int 1 然后在我的片段中,我的 RecycleView 是,我得到了 SharedPreferences int 并检查它是否不是 1 而不是我的 RecycleView xml go INVISIBLE/GONE 然后最后我检查我的一些 RecycleView 是否 GONE/INVISIBLE 我的所有布局都应该消失,以便我的布局在我所有的图片已加载。

但问题是我SharedPreference中的默认值总是被触发,不知道为什么... 我也试过PreferenceManager.getDefaultSharedPreferences(),但没什么不同。

我的适配器滑行:

Glide.with(context)
     .load(listaSvihMembersa.get(i).getImageUrl())
     .circleCrop()
     .placeholder(R.drawable.ic_joint)
     .listener(new RequestListener<Drawable>() {
         @Override
         public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
             return false;
         }

         @Override
         public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
             SharedPreferences sp = context.getSharedPreferences("mortgage", MODE_PRIVATE);
             sp.edit().putInt("motgageList", 1).apply();
             return true;
        }})
        .into(binding.detailedListIMG);
   }

以及我获得 SharedPref 的片段

 private void setMortgageRecycleView(List<MortgageLiabilities> mortgageLiabilitiesList) {
    mortgageRecycleView = binding.rvMortgageList;
    mortgageRecycleView.animate().translationY(0);

    MortgageAdapter adapter = new MortgageAdapter(mortgageLiabilitiesList, context, this, listaSvihMembersa,mortgageRecycleView);
    mortgageRecycleView.setAdapter(adapter);
    SharedPreferences sp = context.getSharedPreferences("mortgage",MODE_PRIVATE);
    int idNmbr = sp.getInt("motgageList", 0);
    if (idNmbr != 1){
        mortgageRecycleView.setVisibility(View.INVISIBLE);
        Log.i(TAG, "visibility motgageListe: " + mortgageRecycleView.getVisibility());
    }
    else {
        mortgageRecycleView.setVisibility(View.VISIBLE);
        Log.i(TAG, "visibility motgageListe: " + mortgageRecycleView.getVisibility());
    }
    mortgageRecycleView.setLayoutManager(new LinearLayoutManager(context));
    mortgageRecycleView.setHasFixedSize(true);
}

在这里,我检查是否有任何Recycleviews 不可见:

 if (mortgageRecycleView.getVisibility() == View.INVISIBLE || loansRecycleViews.getVisibility() == View.INVISIBLE
                    || otherRecycleView.getVisibility() == View.INVISIBLE || creditCardRecycleView.getVisibility() == View.INVISIBLE){
     binding.constraintLayout.setVisibility(View.GONE);
     Toast.makeText(context, "Ne moze da ucita,root view je GONE", Toast.LENGTH_SHORT).show();
 }

编辑:我的 shared_pref.xml 文件

<map>
    <int name="motgageList" value="1" />
</map>

【问题讨论】:

  • 请在保存数据后使用断点并检查共享的 pref xml 文件。会建议您对 PREFERANCE 和键名使用常量。
  • @Yogendra 我检查了我的 shared_pref.xml 文件并编辑了问题..它说正确的值...
  • @Yogendra 好的,我重新安装了我的应用程序,从存储中删除了数据,现在当我尝试打开 shared_pref.xml 时出现错误,说没有这样的文件或目录

标签: java android android-recyclerview sharedpreferences android-glide


【解决方案1】:

Glide 正在执行一个异步任务,所以大多数情况下你的代码会在回调 onResourceReady 被调用之前到达 int idNmbr = sp.getInt("motgageList", 0);

共享首选项在这里不是一个好的选择,您可以使用自定义回调并将其传递给您的适配器。

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多