Android应用程序因共享偏好而崩溃

Android应用程序因共享偏好而崩溃,android,android-activity,sharedpreferences,switching,Android,Android Activity,Sharedpreferences,Switching,在我的应用程序的第一个活动中,我首先检查SharedPreferrence是否包含一些值。如果为空,则打开第一个活动;如果不为空,则打开应用程序的第二个活动 下面是我代码的一部分 SharedPreferences prefs = this.getSharedPreferences( "idValue", MODE_WORLD_READABLE ); public void onCreate(Bundle savedInstanceState) { super.onCreat

在我的应用程序的第一个活动中,我首先检查SharedPreferrence是否包含一些值。如果为空,则打开第一个活动;如果不为空,则打开应用程序的第二个活动

下面是我代码的一部分

SharedPreferences prefs = this.getSharedPreferences( "idValue", MODE_WORLD_READABLE );
public void onCreate(Bundle savedInstanceState)
{       
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.login);
  if(prefs.getString("idValue", "")==null)
    {
        userinfo();
    }
    else
    {
        Intent myIntent = new Intent(getBaseContext(), Add.class);
    startActivityForResult(myIntent, 0);
    }
}
当我签入logcat时,它在下面一行显示错误

但当第一个活动打开时,我的应用程序就会崩溃

 SharedPreferences prefs = this.getSharedPreferences( "idValue", MODE_WORLD_READABLE );
以下是我的日志详细信息

AndroidRuntime(5747): Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime(5747): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gs.cc.sp/com.gs.cc.sp.UserInfo}: java.lang.NullPointerException
AndroidRuntime(5747): Caused by: java.lang.NullPointerException
AndroidRuntime(5747):     at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
AndroidRuntime(5747):     at com.gs.cc.sp.UserInfo.<init>(UserInfo.java:62)
AndroidRuntime(5747):     at java.lang.Class.newInstanceImpl(Native Method)
AndroidRuntime(5747):     at java.lang.Class.newInstance(Class.java:1479)
AndroidRuntime(5747):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
AndroidRuntime(5747):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
AndroidRuntime(5747):未捕获处理程序:线程主线程由于未捕获异常而退出
AndroidRuntime(5747):java.lang.RuntimeException:无法实例化活动组件信息{com.gs.cc.sp/com.gs.cc.sp.UserInfo}:java.lang.NullPointerException
AndroidRuntime(5747):由以下原因引起:java.lang.NullPointerException
AndroidRuntime(5747):位于android.content.ContextWrapper.GetSharedReferences(ContextWrapper.java:146)
AndroidRuntime(5747):位于com.gs.cc.sp.UserInfo.(UserInfo.java:62)
AndroidRuntime(5747):位于java.lang.Class.newInstanceImpl(本机方法)
AndroidRuntime(5747):位于java.lang.Class.newInstance(Class.java:1479)
AndroidRuntime(5747):位于android.app.Instrumentation.newActivity(Instrumentation.java:1021)
AndroidRuntime(5747):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)

请朋友们告诉我哪里出了问题

在初始化之前,您正在访问类的当前实例
,这就是为什么会出现nullpointer异常

SharedPreferences prefs = null;
public void onCreate(Bundle savedInstanceState)
{       
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.login);
prefs = this.getSharedPreferences( "idValue", MODE_WORLD_READABLE );
  if(prefs.getString("idValue", "")==null)
    {
        userinfo();
    }
    else
    {
        Intent myIntent = new Intent(getBaseContext(), Add.class);
    startActivityForResult(myIntent, 0);
    }
}

您没有说,但我假设您在调用
userinfo()
时初始化了一些用户信息

关于
prefs.getString
您需要知道的是,它永远不会返回
null
。您提供的第二个参数定义了如果首选项不存在它将返回的值-因此在您的示例中,您可能应该使用:

if ( prefs.getString ( "idValue", "" ).equals ( "" ) )
{
    userinfo();
}
顺便说一句:if(prefs.getString(“idValue”,“”)=null)永远不会为真,因为如果没有“idValue”,将设置默认值(“”),该值不是null。