我该如何访问这个课程

时间:2012-07-12 03:54:56

标签: java android

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错误。

2 个答案:

答案 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();

无论哪种方式都很好,但你正在做的是两种方法的混合,它都行不通。