在Android-GetSharedRef中的静态类中引用非静态方法
我有以下代码:在Android-GetSharedRef中的静态类中引用非静态方法,android,sharedpreferences,static-members,Android,Sharedpreferences,Static Members,我有以下代码: Context context = Activity.getApplicationContext(); SharedPreferences settings = context.getSharedPreferences("AutoMsgSharedPrefs", MODE_PRIVATE); // Writing data to SharedPreferences SharedPreferences.
Context context = Activity.getApplicationContext();
SharedPreferences settings = context.getSharedPreferences("AutoMsgSharedPrefs", MODE_PRIVATE);
// Writing data to SharedPreferences
SharedPreferences.Editor editor = settings.edit();
editor.putString("key", "some value");
editor.commit();
我一直在尝试使用SharedPref来存储会话类中给出的消息,如示例-。但,若我试图在会话类的构造函数中实现非静态方法,则无法从静态类中引用该方法。那么我该如何解决这个问题呢
以下是我按照建议更新时出现的错误截图:
要获取上下文,无需使用Activity类。更改此代码
Context context = Activity.getApplicationContext();
到
要获取上下文,无需使用Activity类。更改此代码
Context context = Activity.getApplicationContext();
到
说明:Activity类没有静态方法getApplicationContext,因为此方法是非静态的,所以您需要有一个对象实例。因此,对上下文实例上的活动调用此方法。说明:Activity类没有静态方法getApplicationContext,因为此方法是非静态的,所以您需要有一个对象实例。因此,对上下文实例上的活动调用此方法。此处 Context=Activity.getApplicationContext 此行不返回应用程序调用GetSharedReferences的有效上下文 要从非活动、服务调用GetSharedReferences,。。。您需要从应用程序组件(如活动、服务等)传递有效上下文的类 若要在对话中获取上下文,请使用已在给定示例中创建的对话类构造函数,您需要再添加一个参数:
Context mContext;
public Conversation(int conversationId, String participantName,
List<String> messages,Context mContext) {
.....
this.mContext=mContext;
}
这里
Context=Activity.getApplicationContext
此行不返回应用程序调用GetSharedReferences的有效上下文
要从非活动、服务调用GetSharedReferences,。。。您需要从应用程序组件(如活动、服务等)传递有效上下文的类
若要在对话中获取上下文,请使用已在给定示例中创建的对话类构造函数,您需要再添加一个参数:
Context mContext;
public Conversation(int conversationId, String participantName,
List<String> messages,Context mContext) {
.....
this.mContext=mContext;
}
正如@ρцσѕρєцK已经指出的,您必须以某种方式授予您的非上下文类对您的上下文实例的访问权。例如,通过引入新参数
正如@ρцσѕρєцK已经指出的,您必须以某种方式授予您的非上下文类对您的上下文实例的访问权。例如,通过引入新参数
对话是静态类?是:对话是静态类?是:在对话中传递构造函数it self中的上下文在对话中传递构造函数it self中的上下文
public Conversation(int conversationId, String participantName,
List<String> messages, Context context) {
.....
}
public void doStuff(Context context) {
// do your work here
}