【问题标题】:SharedPreferences NullPointer Exception, static and non-static methodSharedPreferences NullPointer 异常,静态和非静态方法
【发布时间】:2012-07-29 20:19:11
【问题描述】:

我正在尝试使用 afreechart 绘制折线图,​​我已经使用 SharedPreferences 保存了 x 和 y 点。但是,当我尝试从 sharedpreferences 获取一些信息时出现错误,我怀疑它与静态和非静态方法不能一起工作有关,但我无法弄清楚。

所以这是我添加 x 和 y 点的类:

public class DrawView extends DemoView{

static int round;
static int score;

public DrawView(Context context) {
    super(context);

    final AFreeChart chart = createChart();

    setChart(chart);
}

private static XYSeriesCollection createDataset() {
    XYSeries xyS1 = new XYSeries("Progress", true, false);

     //Here I try to get the info from SharedPreferences via another class

    Stat t = new Stat();
    round =t.getround();
    for(int i = 0; i < round; i++){
        score = t.getscore(i);
        xyS1.add(i, score);
    }


    XYSeriesCollection xySC = new XYSeriesCollection();
    xySC.addSeries(xyS1);


    return xySC;
}


/**
 * Creates a sample chart.
 * @param dataset the dataset.
 * @return A sample chart.
 */
private static AFreeChart createChart() {
    XYDataset dataset = createDataset();
    AFreeChart chart = ChartFactory.createXYLineChart(
            "Statistics",
            "Rounds",
            "Points",
            dataset,
            PlotOrientation.VERTICAL,
            false,
            true,
            false);
    XYPlot plot = (XYPlot) chart.getPlot();
    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    renderer.setSeriesLinesVisible(0, true);
    plot.setRenderer(renderer);
    NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
    domainAxis.setUpperMargin(0.2);

    // add some annotations...
    XYTextAnnotation annotation = null;
    Font font = new Font("SansSerif", Typeface.NORMAL, 12);
    annotation = new XYTextAnnotation("Progress", 96, 57);
    annotation.setFont(font);
    annotation.setTextAnchor(TextAnchor.HALF_ASCENT_LEFT);
    plot.addAnnotation(annotation);


    return chart;
}
}

这是我尝试从 SharePreferences 获取信息的类:

public class Stat extends Activity {

public static String filenamestat = "Stat";
SharedPreferences someStat;
/**
 * Called when the activity is starting.
 * @param savedInstanceState
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    DrawView mView = new DrawView(this);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(mView);

}

public int getround(){
    //Here is the error 
    someStat = getSharedPreferences(filenamestat, 0);
    String roundtaker = someStat.getString("round", "0");
    int round = Integer.parseInt(roundtaker);
    return round;
}


public int getscore(int a){
    String scoretaker = Integer.toString(a);
    String stringscore = someStat.getString(scoretaker, "0");
    int score = Integer.parseInt(stringscore);
    return score;
}        
}

LogCat

07-29 20:09:47.422: E/AndroidRuntime(414): FATAL EXCEPTION: main
07-29 20:09:47.422: E/AndroidRuntime(414): java.lang.RuntimeException: Unable to start activity ComponentInfo{at com.the.package/at com.the.package.Stat}: java.lang.NullPointerException
07-29 20:09:47.422: E/AndroidRuntime(414):  at         android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.os.Looper.loop(Looper.java:123)
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-29 20:09:47.422: E/AndroidRuntime(414):  at java.lang.reflect.Method.invokeNative(Native Method)
07-29 20:09:47.422: E/AndroidRuntime(414):  at java.lang.reflect.Method.invoke(Method.java:521)
07-29 20:09:47.422: E/AndroidRuntime(414):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-29 20:09:47.422: E/AndroidRuntime(414):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-29 20:09:47.422: E/AndroidRuntime(414):  at dalvik.system.NativeStart.main(Native Method)
07-29 20:09:47.422: E/AndroidRuntime(414): Caused by: java.lang.NullPointerException
07-29 20:09:47.422: E/AndroidRuntime(414):  at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
07-29 20:09:47.422: E/AndroidRuntime(414):  at at com.the.package.Stat.getround(Stat.java:33)
07-29 20:09:47.422: E/AndroidRuntime(414):  at at com.the.package.DrawView.createDataset(DrawView.java:50)
07-29 20:09:47.422: E/AndroidRuntime(414):  at at com.the.package.DrawView.createChart(DrawView.java:71)
07-29 20:09:47.422: E/AndroidRuntime(414):  at com.the.package.DrawView.<init>(DrawView.java:38)
07-29 20:09:47.422: E/AndroidRuntime(414):  at com.the.package.Stat.onCreate(Stat.java:26)

【问题讨论】:

  • Stat 类的第 33 行是哪一行?
  • someStat = getSharedPreferences(filenamestat, 0);
  • someStat 为空,因为您没有在其中添加任何值。看我的回答
  • 我在另一个类中添加了值,我对其进行了测试,并从 sharedpreferences 中获取了随机文本视图的信息,因此它具有值。

标签: android charts nullpointerexception sharedpreferences static-methods


【解决方案1】:

您为什么不在您认为不工作的代码之前中断并单步通过它查看您的成员变量等。看看您是否能发现问题所在。你有一个调试器供你使用,所以我建议你应该使用它。 :)

【讨论】:

    【解决方案2】:

    我的猜测是名称 stat 没有共享偏好,因此 someStat 始终为空

    【讨论】:

      【解决方案3】:

      您的Stat 类扩展了Activity,但您将其创建为new Stat()Activity 不能这样做。

      相反,您可以使用

      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
      

      【讨论】:

        【解决方案4】:

        请检查您的 Manifest.xml 文件中是否包含所有活动的条目。 如果您在帖子中显示它会有所帮助。

        【讨论】:

          【解决方案5】:

          您试图从共享偏好中获取价值,但您没有为共享偏好设置任何价值。这就是 NullPointerException 的原因。

          请检查您的方法 getround()

          【讨论】:

          • 我在另一个类中添加了值,我对其进行了测试,并从 sharedpreferences 中获取了随机文本视图的信息,因此它具有值。
          猜你喜欢
          • 2020-12-27
          • 2016-08-07
          • 2017-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多