【问题标题】:Get HashMap data from another Activity从另一个 Activity 获取 HashMap 数据
【发布时间】:2013-11-20 08:44:11
【问题描述】:

我使用this tutorial 来保存会话。我仍然不明白如何从另一个活动中获取这些数据。

 public HashMap<String, String> getUserDetails(){
    HashMap<String, String> user = new HashMap<String, String>();
      user.put(KEY_FULLNAME, pref.getString(KEY_FULLNAME, null));        
      user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));

    // return user
    return user;
}

我发现人们正在使用意图将其发送到另一个活动,例如 link.对于该类,并调用类似var.theMethodFromClass()) 的方法。


更新

public SessionManager(Context context){
    this._context = context;
    pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    editor = pref.edit();
}

此函数在我的 SessionManager 类中,我如何直接使用它,而无需再次初始化所有变量,因为它们已经在活动中初始化以便使用。

SessionManager.class的完整代码在第一个链接中

【问题讨论】:

    标签: java android android-intent hashmap


    【解决方案1】:

    您已经将数据保存在 SharedPrefernces 中,所以为什么需要将其从一个 Activity 发送到另一个 Activity..尝试在另一个活动中打开 SharedPreference 文件并随意使用它..

    【讨论】:

    • SharedPreferences pref; String name = pref.getString(KEY_FULLNAME, null); 喜欢这样吗?但我必须初始化pref
    • yes..并使用您在 Activity1 中提到的相同文件名初始化首选项..您必须使用相同的密钥来检索数据..
    【解决方案2】:

    如果您的项目允许,只需将 HashMap 设为 static,然后您就可以通过调用 Class.hashmapvar

    在项目的任何其他活动中检索它

    【讨论】:

    • 它解决了某些情况,但它始终是一个巨大的错误来源。要了解为什么不应该这样做,请阅读:stackoverflow.com/questions/9541688/…
    • 当然你必须做一个空检查......这应该是一个快速解决问题的方法,我知道还有其他方法可以解决这个问题,我只是打算做些什么跨度>
    • 空检查只会避免 NullPointerException 并且你不会得到你想要的 HashMap(在某些情况下)。
    【解决方案3】:

    如果您想保存HashMap 并在应用程序重新启动后使用它,请使用SharedPreferences。它会将HashMap 保存在设备中。

    如果您只需要将HashMap 作为参数传递给另一个Activity,请使用Intent。您通过Intent 传递的所有内容都必须是可序列化的,以便在所有情况下都能正常工作。阅读:http://developer.android.com/guide/components/intents-filters.html

    【讨论】:

      【解决方案4】:

      在调用活动中将数据保存到首选项。

      public void saveToPreferences(HashMap<String, String> user)
      {
      SharedPreferences pref = getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
      SharedPreferences.Editor editor = pref.edit();
      editor.putString(KEY_FULLNAME, user.get(KEY_FULLNAME));
      editor.putString(KEY_EMAIL, user.get(KEY_EMAIL));
          editor.commit();
      }
      

      在您调用的活动中。 使用此代码。 首先初始化首选项,然后从中获取数据。

      public HashMap<String, String> getUserDetails(){
      SharedPreferences pref = getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
          HashMap<String, String> user = new HashMap<String, String>();
          user.put(KEY_FULLNAME, pref.getString(KEY_FULLNAME, null));        
          user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
      
      
          return user;
          }
      

      【讨论】:

        【解决方案5】:

        为什么要将 hashmap 传递给 Activity?这使得 NO 有意义。

        从 hashmap/preference 中获取数据,并将其从 Activity A 传递到 Activity B。在 Activity 之间传递数据时,请坚持使用原语。

        【讨论】:

          猜你喜欢
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-05
          • 2014-06-08
          • 2019-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多