import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
public class LoadSettings
{
public static void LoadMySettings (Context ctx)
{
SharedPreferences sharedPreferences = ctx.getSharedPreferences("MY_SHARED_PREF", 0);
String strSavedMem1 = sharedPreferences.getString("gSendTo", "");
String strSavedMem2 = sharedPreferences.getString("gInsertInto", "");
String cCalId = sharedPreferences.getString("gCalID", "");
setInsertIntoStr(strSavedMem2);
setSendToStr(strSavedMem1);
}
private static String cSendToStr;
private static String cInsertIntoStr;
private int cCalId;
private Uri cCalendars;
public String getSendToStr()
{
return this.cSendToStr;
}
public static void setSendToStr(String pSendToStr)
{
cSendToStr = pSendToStr;
}
public String getInsertIntoStr()
{
return this.cInsertIntoStr;
}
public static void setInsertIntoStr(String pInsertIntoStr)
{
cInsertIntoStr = pInsertIntoStr;
}
}
来自通话类我已尝试了很多当前的。
LoadSettings.LoadMySettings(this);
但是当我尝试获取一些数据时。
textSavedMem1.setText(LoadSettings.getSendToStr());
我收到Null错误。
答案 0 :(得分:4)
LoadMySettings
不是类,而是方法(因此,如果遵循Oracle / Sun的Java语言命名约定,它应该以小写字母开头)。
您确实可以通过调用LoadSettings.loadMySettings(someContext)
来访问它,其中someContext
是要传递的上下文。在您的示例中,我们不知道this
指的是什么,所以也许您的错误就在那里。
然后当你这样做时:textSavedMem1.setText(LoadSettings.getSendToStr());
您调用非静态方法,因此应该使用LoadSettings
的实例,或者更可能考虑您的代码,您可以将getSendToStr
更改为:
public static String getSendToStr()
{
return cSendToStr;
}
虽然这似乎是一个相当糟糕的设计。
也许如果你告诉我们更多关于你尝试做什么的事情,我们可以提供更多帮助,因为我们的答案只会让你更进一步。
编辑: 好的,我只知道你要做的是什么......
您需要返回并学习基本Java概念并首先阅读访问修饰符和构造函数,以及Java中的OO语义一般
将您的班级更改为:
public class LoadSettings
{
public LoadSettings(Context ctx)
{
SharedPreferences sharedPreferences =
ctx.getSharedPreferences("MY_SHARED_PREF", 0);
String strSavedMem1 = sharedPreferences.getString("gSendTo", "");
String strSavedMem2 = sharedPreferences.getString("gInsertInto", "");
String cCalId = sharedPreferences.getString("gCalID", "");
setInsertIntoStr(strSavedMem2);
setSendToStr(strSavedMem1);
}
private String cSendToStr;
private String cInsertIntoStr;
private int cCalId;
private Uri cCalendars;
public String getSendToStr()
{
return cSendToStr;
}
public void setSendToStr(String pSendToStr)
{
cSendToStr = pSendToStr;
}
public String getInsertIntoStr()
{
return cInsertIntoStr;
}
public void setInsertIntoStr(String pInsertIntoStr)
{
cInsertIntoStr = pInsertIntoStr;
}
}
使用:
创建LoadSettings
的新实例
LoadSettings mySettings = new LoadSettings(someContext);
然后您可以正确调用:
textSavedMem1.setText(mySettings.getSendToStr());
答案 1 :(得分:1)
Haylem有权利,但我只想添加评论:
Java中基本上有两种设计模式可供您尝试。一个是静态类,其中所有方法和变量都是静态的,并且您可以访问它们,例如,
LoadSettings.loadMySettings(this);
string = LoadSettings.getSendToStr()
// etc.
另一种模式是“singleton”类,您只需创建该类的一个实例并访问该实例:
LoadSettings ls = new LoadSettings(this);
ls.loadMySettings();
string = ls.getSendToStr();
无论哪种方式都很好,但你正在做的是两种方法的混合,它都行不通。