【问题标题】:What am I doing wrong with the getActivity method?getActivity 方法我做错了什么?
【发布时间】:2019-07-21 18:52:51
【问题描述】:

我终其一生都无法弄清楚 getActivity 方法的作用。

我对 android 编程比较陌生,我正在尝试为我的应用程序提供自己的少量存储空间。为此,我使用了 SharedPreferences。通常我不会“逐字逐句地”复制 Android 开发人员上的内容,但是,我即将放弃希望,因为我什么也做不了。我什至无法从网站上获取代码以正常工作

这是我的应用中的相关代码。

public String activeTab = "course_reg";
private static final String DEBUG_TAG = "Gestures";
public static final String MY_PREFS_NAME = "MyPrefsFile";

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        MY_PREFS_NAME, Context.MODE_PRIVATE);

来自 Android 开发者的代码如下。

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
    getString(R.string.preference_file_key), Context.MODE_PRIVATE);

这里是网站Android Developer page: Save key-value data

每次我将 getActivity() 放入 Android Studio 时,它都会说它无法解析该方法。

我不知道我应该用它做什么,而且我在 Stack Overflow 上提出的所有其他问题最终都没有告诉我任何信息。

getActivity 做了什么和/或我做错了什么。

【问题讨论】:

    标签: java android android-fragments sharedpreferences


    【解决方案1】:

    我对 android 编程比较陌生

    很可能您是编程新手,因为您可能知道另一种编程语言,但您来对地方了!

    代码:

    Context context = getActivity();
    SharedPreferences sharedPref = 
        context.getSharedPreferences(
            MY_PREFS_NAME, 
            Context.MODE_PRIVATE
        );
    

    只是代码的一部分。它不是你需要的重要部分,因为所有非初学者都知道它是什么。

    在编程中(对我而言)学习搜索比学习热学更有用! 在这种情况下,您应该搜索“getSharedPreferences example”。

    如您所见,如果您在 Activity 类中,则不需要 getActivity。如果您在 Fragment 课程或其他任何课程中,则需要。取决于你在哪里。

    例如here它不是getActivity()

    还有here 有一个getApplicationContext()

    here你会找到一个如何使用它的教程

    【讨论】:

    • 这只是我第一次使用 Java 哈哈。它是如此不同。我怎么知道我是否在片段类中?
    • 我觉得如果我更新更多 Java 会很明显
    • @NoahBaxley 你可以通过查看你打开的文件中的类定义来判断你是在片段还是活动中。它将显示extends Activityextends Fragment(或其中的一些其他子类,例如AppCompatActivity,它是“是一个”活动)
    【解决方案2】:

    每次我将 getActivity() 放入 Android Studio 时,它都会说它无法解析该方法。

    这很可能是因为您在扩展 Activity 或 AppCompatActivity 的类中编写了一段代码,而两者都没有 getActivity() 方法。

    getActivity() 方法存在于 Fragment 类中,它用于获取对其附加的 Activity 的引用。此方法可用于完成需要 Activity 上下文的工作。

    您可以简单地使用 get SharedPreferences 而无需之前添加上下文。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       SharedPreferences sp = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
    }
    

    【讨论】:

      【解决方案3】:

      即使您将 google 的代码替换为以下代码,您的代码也能正常工作:

      SharedPreferences sharedPref = this.getSharedPreferences(
      getString(R.string.preference_file_key), Context.MODE_PRIVATE);
      

      这是因为您的活动扩展了 Android 活动类,如果您查看 Android 活动类的文档,您会看到 getSharedPreferences() 方法需要一个 Context (Context.getSharedPreferences(..),它已经扩展由 Activity 类(Activity 扩展 Context 类)。尝试用上面的代码代替你拥有的任何东西,它应该可以工作。

      【讨论】:

        【解决方案4】:

        getActivity() 是属于 Fragment 或 FragmentCompat 类的方法(检查 Android API 中的这些类),它所做的只是获取对片段附加到的活动上下文的引用。

        如果您只需要访问 sharedpreferences,则需要调用 getContext() 或关键字“this”(如果您是从 Activity 或 Service 中调用它)。

        在您的代码 sn-p 中,我猜所有这些都是您类中的属性或常量,因此如果在 Activity 或服务中使用它,请将其更改为此。如果您在另一个非 android 对象中使用它,则必须从其他地方访问 if(使用 dagger 并注入上下文,或者在应用程序类中对其进行一些静态引用,但不推荐使用最后一个选项) .

        public String activeTab = "course_reg";
        private static final String DEBUG_TAG = "Gestures";
        public static final String MY_PREFS_NAME = "MyPrefsFile";
        
        Context context = getContext(); // or just Context context = this;
        SharedPreferences sharedPref = context.getSharedPreferences(
                MY_PREFS_NAME, Context.MODE_PRIVATE);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-12
          相关资源
          最近更新 更多