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

我得到一个空错误。

4

2 回答 2

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());
于 2012-07-12T04:02:10.710 回答
1

Haylem 拥有它的权利,但我只是想添加一条评论:

Java 中基本上有两种设计模式可用于您尝试做的事情。一种是静态类,其中所有方法和变量都是静态的,您可以访问它们,例如

LoadSettings.loadMySettings(this);
string = LoadSettings.getSendToStr()
// etc.

另一种模式是“单例”类,您可以在其中创建该类的一个实例并访问该实例:

LoadSettings ls = new LoadSettings(this);
ls.loadMySettings();
string = ls.getSendToStr();

无论哪种方式都很好,但是您正在做的是两种方法的混合,它不会起作用。

于 2012-07-12T18:38:36.740 回答