getActivity方法有什么问题?

时间:2019-02-27 22:58:14

标签: java android android-fragments sharedpreferences

我无法弄清楚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做什么和/或我做错了什么。

4 个答案:

答案 0 :(得分:2)

  

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

这是因为很可能是您在扩展Activity或AppCompatActivity的类内编写代码,而这两个都不具有getActivity()方法。

片段类中存在

getActivity()方法,该方法用于获取对其所附接的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);
}

答案 1 :(得分:1)

  

我对android编程比较陌生

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

代码:

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

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

(对我而言)在编程中(学到很多)比学习“ Therms”更有用。 在这种情况下,您应该搜索“ getSharedPreferences示例”。

然后,您将看到,如果您处于Activity类中,则不需要getActivity。如果您在Fragment类或其他任何类中,则需要s。取决于你在哪里。

例如here不是getActivity()

here和一个getApplicationContext()

here和您将找到如何使用它的教程

答案 2 :(得分:1)

即使您将Google的代码替换为以下代码,您的代码也可以使用:

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

这是因为您的活动扩展了Android活动类,并且如果您查看Android活动类的文档,则将看到getSharedPreferences()方法需要一个Context(Context.getSharedPreferences(..),该上下文已经扩展了通过Activity类(Activity扩展了Context类)。尝试用上面的代码代替您拥有的所有东西,并且应该起作用。

答案 3 :(得分:0)

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

如果您只需要访问共享的首选项,则从活动或服务中调用它时,需要调用getContext()或关键字“ this”。

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

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);