繁体   English   中英

我用getActivity方法做错了什么?

[英]What am I doing wrong with the getActivity method?

我无法弄清楚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开发人员页面:保存键值数据

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

我不知道我该怎么办,我在Stack Overflow上遇到的所有其他问题最终都没有告诉我任何事情。

getActivity会做什么和/或我在做什么错。

每当我将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);
}

我对android编程比较陌生

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

编码:

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

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

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

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

例如, 这里不是getActivity()

而且这里有一个getApplicationContext()

在这里,您将找到如何使用它的教程

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

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

这是因为您的活动扩展了Android活动类,并且如果您查看Android活动类的文档,则会看到getSharedPreferences()方法需要一个Context(Context.getSharedPreferences(..),该活动已将其扩展class(活动扩展了Context类),请尝试用上面的代码代替您拥有的所有代码,并且应该可以使用。

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

如果您只需要访问sharedpreferences,则需要从Activity或Service中调用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM