Android 共享首选项崩溃

本·鲁

当我将其放入手机进行调试时,此活动崩溃了,我只是添加了用于存储变量的部分。我做错什么了吗?

这是一个活动,如果他们更早设置,应该获取当前变量,用户也可以设置它们。

package com.software.roux.diabcalc;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

import static com.software.roux.diabcalc.R.id.bolus;

public class Settings extends AppCompatActivity {

    SharedPreferences mPrefs = getSharedPreferences("label", 0);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        setTitle("Insulin Calculator by Ben Roux");

        String bolusString = mPrefs.getString("bolus", "0");
        String corrString = mPrefs.getString("correction", "0");
        String lowString = mPrefs.getString("low", "0");
        String highString = mPrefs.getString("high", "0");

        EditText b1 = (EditText)findViewById(R.id.bolus);
        b1.setText(bolusString);

        EditText b2 = (EditText)findViewById(R.id.correction);
        b2.setText(corrString);

        EditText b3 = (EditText)findViewById(R.id.targetlow);
        b3.setText(lowString);

        EditText b4 = (EditText)findViewById(R.id.targethigh);
        b4.setText(highString);
    }

    public void switchclick(View a) {
        if (a.getId() == R.id.backbutton) {
            Intent myIntent = new Intent(Settings.this, MainActivity.class);
            Settings.this.startActivity(myIntent);
        }
    }

    public void setclick(View b) {
        if (b.getId() == R.id.setter) {

            EditText b1 = (EditText)findViewById(R.id.bolus);
            String bolussave = ""+b1;
            SharedPreferences.Editor mEditor1 = mPrefs.edit();
            mEditor1.putString("bolus", bolussave).commit();

            EditText b2 = (EditText)findViewById(R.id.correction);
            String corrsave = ""+b2;
            SharedPreferences.Editor mEditor2 = mPrefs.edit();
            mEditor2.putString("correction", corrsave).commit();


            EditText b3 = (EditText)findViewById(R.id.targetlow);
            String lowsave = ""+b3;
            SharedPreferences.Editor mEditor3 = mPrefs.edit();
            mEditor3.putString("low", lowsave).commit();


            EditText b4 = (EditText)findViewById(R.id.targethigh);
            String highsave = ""+b4;
            SharedPreferences.Editor mEditor4 = mPrefs.edit();
            mEditor4.putString("high", highsave).commit();


        }
    }
}

更新崩溃日志:

03-18 15:29:59.477 7801-7801/com.software.roux.diabcalc E/AndroidRuntime:致命异常:主进程:com.software.roux.diabcalc,PID:7801 java.lang.RuntimeException:无法实例化活动ComponentInfo{com.software.roux.diabcalc/com.software.roux.diabcalc.Settings}: java.lang.NullPointerException: 尝试调用虚拟方法 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang. String, int)' 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3094) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100( ActivityThread.java:222) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper。loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller。 run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 引起:java.lang.NullPointerException:尝试调用虚拟方法'android.content.SharedPreferences android.content .Context.getSharedPreferences(java.lang.String, int)' 在 android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:185) 的空对象引用上,在 com.software.roux.diabcalc.Settings.(Settings.java: 21) 在 java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newActivity(Instrumentation.java:1095) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3084) at android.app.ActivityThread .handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler.dispatchMessage( Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) 在 java.lang.reflect.Method.invoke(Native Method)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:1120)ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:1120)

维亚切斯拉夫

只是initateSharedPreferences mPrefs以后。onCreate方法。

context后,才初始化onCreate方法。所以,这必须工作:

SharedPreferences mPrefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        setTitle("Insulin Calculator by Ben Roux");
 mPrefs= getSharedPreferences("label", 0);

作为另一个问题,在您当前的代码中,您只需将EditText变量的地址保存在内存中。要检索文本,请使用:

String bolussave = ""+b1.getText().toString();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

共享首选项-Android

来自分类Dev

Android首选项片段OnBackPressed崩溃

来自分类Dev

在Android中共享首选项

来自分类Dev

如何保护Android共享首选项?

来自分类Dev

Xamarin Android模拟共享首选项

来自分类Dev

Android:共享首选项架构

来自分类Dev

Android Studio:初始化共享首选项会导致活动启动崩溃

来自分类Dev

使用共享首选项时,Android应用程序崩溃

来自分类Dev

android共享首选项&捆绑vs共享首选项

来自分类Dev

如何在Android的“共享首选项”中使用主键?

来自分类常见问题

相当于iOS的Android共享首选项

来自分类Dev

Roboelectric断言因共享首选项Android而失败

来自分类Dev

具有共享首选项的Android登录/注册

来自分类Dev

在Android中使用共享首选项与捆绑包

来自分类Dev

Android可以将共享首选项用于登录目的

来自分类Dev

android共享首选项似乎被覆盖Java

来自分类Dev

Android Studio:无法在测试中写入共享首选项

来自分类Dev

如何在Android的片段中使用共享首选项?

来自分类Dev

执行AsyncTask时,Android共享首选项错误?

来自分类Dev

Android应用-共享首选项无法正确加载

来自分类Dev

Android-在单独的类中使用共享首选项?

来自分类Dev

Unity,Android和iOS之间的共享首选项

来自分类Dev

Android共享首选项TinyDB putListObject函数

来自分类Dev

Android静态变量和共享首选项

来自分类Dev

具有ArrayList的Android共享首选项

来自分类Dev

混乱与Android的共享首选项-使用哪个功能?

来自分类Dev

共享首选项不起作用,android,kotlin?

来自分类Dev

Android从加载了loadURL的网页访问共享首选项

来自分类Dev

Android开发:关于共享首选项的使用

Related 相关文章

热门标签

归档