2017-01-18 19 views
0

後的應用程序重新運行我用sharedPreference保存我的對象空值,它工作正常,但問題是,當應用程序被墜毀嘗試運行前一個活動中,我稱之爲共享這個getQbUser()方法首選項無法找到任何開始在循環中崩潰的對象,直到我關閉應用程序並重新運行我的應用程序並且它工作正常。共享首選項具有該對象。共享偏好表明當碰撞

public void saveQbuser(QBUser user){ 
    SharedPreferences.Editor prefsEditor = mPref.edit(); 
    Gson gson = new Gson(); 
    String json = gson.toJson(user); 
    prefsEditor.putString("qbuser", json); 
    prefsEditor.commit(); 
} 

public QBUser getQbUser(){ 
    Gson gson = new Gson(); 
    String json = mPref.getString("qbuser",""); 
    QBUser obj = gson.fromJson(json, QBUser.class); 
    return obj; 

} 

//日誌

Caused by java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference 
    com.attribes.push2beat.Utils.DevicePreferences.getQbUser (DevicePreferences.java:86) 
    com.attribes.push2beat.mainnavigation.SelectActivity.createChatService (SelectActivity.java:38) 
    com.attribes.push2beat.mainnavigation.SelectActivity.onCreate (SelectActivity.java:27) 
    android.app.Activity.performCreate (Activity.java:6251) 
    android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) 
    android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) 
    android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) 
    android.app.ActivityThread.-wrap11 (ActivityThread.java) 
    android.app.ActivityThread$H.handleMessage (ActivityThread.java:1344) 
    android.os.Handler.dispatchMessage (Handler.java:102) 
    android.os.Looper.loop (Looper.java:148) 
    android.app.ActivityThread.main (ActivityThread.java:5417) 
    java.lang.reflect.Method.invoke (Method.java) 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:726) 
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 

**注:這個問題只發生時,應用程序是死機狀態,並嘗試通過自身運行之前的活動,否則就沒有問題,我的愛好級別* *

+0

你在哪裏初始化 「mPref」 對象????請發佈完整的代碼.. –

+0

你是否初始化了你的'SharedPreferences mPref;'? – W4R10CK

+0

您的sharedPref變量,如果您已經初始化,在應用程序崩潰後將爲空 –

回答

0

能否請您出示QBUser.class

我覺得你QBUser類應該是這樣的。

public class QBUser { 

@SerializedName("name") 
String name; 

@SerializedName("address") 
String address; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

您需要添加SerialzedName Annonation轉換對象爲字符串 您的代碼不能夠對象轉換爲字符串,這就是爲什麼你收到此錯誤。

對於其他不知道此事的人請記住。

+0

這應該是一個評論不是答案 –

+0

感謝您的建議,但我無法評論。 –

+0

它需要50的聲望,請關注不是這個狗屎的問題 –

0

U可以遵循這樣的代碼:

字符串PREFS_NAME = 「QBUser」;

public void saveQbuser(Context context,QBUser user) { 
    Editor editor = context.getSharedPreferences(PREFS_NAME, 
      Context.MODE_PRIVATE).edit(); 
    Gson gson = new Gson(); 
     String json = gson.toJson(user); 
     prefsEditor.putString("qbuser", json); 
     prefsEditor.commit(); 

} 
public QBUser getQbUser() 
{ 

SharedPreferences preferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
     Gson gson = new Gson(); 
String json = preferences.getString("qbuser",""); 
QBUser obj = gson.fromJson(json, QBUser.class); 
return obj; 

} 

或您的QBUser.class

public class QBUser 
    { 
    // do here code setter or getter method of jsonString or objects. 
     } 
+0

我沒有張貼滿級的偏好是整個應用程序工作正常,並保存該對象並獲取它沒有任何問題,但是當應用程序是墜毀我的android設備自動運行以前的活動,並在那個時候它沒有發現任何價值。但是,如果你關閉了應用程序,並再次運行該活動首選項有該對象 –

0

您可以使用此代碼。

class PrefsHelper{ 


    private SharedPreference mPref; 
    private Editor edit; 
    private static final PREFS_NAME = "myprefs"; 


    public PrefsHelper(Context context){ 
    mPref = context.getSharedPreferences(PREFS_NAME, 
       Context.MODE_PRIVATE); 
    edit = mPref.edit(); 
    } 

    public void saveQbuser(QBUser user) 
     { 

      Gson gson = new Gson(); 
      String json = gson.toJson(user); 
      edit.putString("qbuser", json); 
      edit.commit(); 

    } 


public QBUser getQbUser() 
{ 
    Gson gson = new Gson(); 
    String json = mPref.getString("qbuser",""); 
    QBUser obj = gson.fromJson(json, QBUser.class); 
    return obj; 

} 
    } 
+0

我沒有發佈完整的類偏好類在整個應用程序工作正常,並保存對象和檢索它沒有任何問題,但當應用程序崩潰我的機器人設備會自動運行先前的活動,並且當時它沒有找到任何值。但是,如果您關閉了應用程序並再次運行該活動,則首選項具有該對象 –

+0

您可以向我展示應用程序崩潰時應用程序返回的活動代碼嗎? –

+0

我認爲在應用程序崩潰時,您不會在之前的活動中找到值,因爲您必須在超級方法中顯示對象,如onCreate()中未調用的那樣。當你的應用程序崩潰之前的活動調用onResume(),因爲它從未被銷燬。 –