应用共享偏好设置崩溃 [英] App is crashing with shared preferences

查看:55
本文介绍了应用共享偏好设置崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用共享的首选项在edittext中正确设置可绘制对象,但是我不知道我哪里出错了,它在活动开始时崩溃了.

I'm trying to set drawables on right in edittext with shared preferences, but I don't know where I went wrong, it's crashing on start of the activity.

我希望它基于按钮的onClick更改可绘制对象,将其保存到共享首选项(这样它将一直保留在该位置,直到用户再次对其进行更改为止),然后根据共享首选项更改可绘制对象.

I want that it changes the drawable based on onClick of button, save it to shared preference (so it will stay there until the user change it again) and then change the drawable based on shared preference.

这是活动:

package com.wishlist.bow;

import android.app.ActionBar;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;


public class ActivitySetup extends ActionBarActivity {

public static final String MyPREFERENCES = "MyPrefs";
public static final String mena = "euro";

SharedPreferences menaPref = getApplicationContext().getSharedPreferences("MyPrefs", MODE_PRIVATE);
Editor editor = menaPref.edit();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_setup);

    ActionBar bar = getActionBar();
    bar.setDisplayShowTitleEnabled(false);

    EditText edittextSrc = (EditText) findViewById(R.id.howMuch);

    if (menaPref.contains("dollar"))
    {
        edittextSrc.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.dollar, 0);
    }

    if (menaPref.contains("euro"))
    {
        edittextSrc.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.euro, 0);
    }

    if (menaPref.contains("koruny"))
    {
        edittextSrc.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.koruny, 0);
    }

    if (menaPref.contains("libra"))
    {
        edittextSrc.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.libra, 0);
    }
}

public void confirm(View view){

}

public void euro(View view){

    String euro = "euro";

    editor.putString(mena, euro);
    editor.commit();

}

public void dollar(View view){

    String dollar = "dollar";

    editor.putString(mena, dollar);
    editor.commit();

}

public void koruny(View view){

    String koruny = "koruny";

    editor.putString(mena, koruny);
    editor.commit();
}

public void libra(View view){

    String libra = "libra";

    editor.putString(mena, libra);
    editor.commit();

}
}

这是崩溃日志:

12-23 17:00:15.277: E/AndroidRuntime(9394): FATAL EXCEPTION: main
12-23 17:00:15.277: E/AndroidRuntime(9394): Process: com.wishlist.bow, PID: 9394
12-23 17:00:15.277: E/AndroidRuntime(9394): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.wishlist.bow/com.wishlist.bow.ActivitySetup}: java.lang.NullPointerException
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2163)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.os.Looper.loop(Looper.java:212)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread.main(ActivityThread.java:5135)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at java.lang.reflect.Method.invokeNative(Native Method)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at java.lang.reflect.Method.invoke(Method.java:515)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at dalvik.system.NativeStart.main(Native Method)
12-23 17:00:15.277: E/AndroidRuntime(9394): Caused by: java.lang.NullPointerException
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at com.wishlist.bow.ActivitySetup.<init>(ActivitySetup.java:17)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at java.lang.Class.newInstanceImpl(Native Method)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at java.lang.Class.newInstance(Class.java:1208)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
12-23 17:00:15.277: E/AndroidRuntime(9394):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2154)
12-23 17:00:15.277: E/AndroidRuntime(9394):     ... 11 more

推荐答案

getApplicationContext()在onCreate或onStart之后可用,但不是这种方式.请在onCreate中初始化您的sharedPreferences.

getApplicationContext() is available after onCreate or onStart but not this way. please init your sharedPreferences in onCreate.

SharedPreferences menaPref;
Editor editor;

public void onCreate(..){
    menaPref = getApplicationContext().getSharedPreferences("MyPrefs", MODE_PRIVATE);
    editor = menaPref.edit();
}

这篇关于应用共享偏好设置崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆