2013-02-10 76 views
1

我已經獲得了我所有的代碼,但一直在崩潰。基本上,這個代碼是一個按鈕,點擊後會添加一個數字。所以,點擊一次,它會是1;再次點擊會變成2,然後3,等等。應用程序不斷崩潰

package com.example.counter; 

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.os.Bundle; 


public class MainActivity extends Activity { 
// Private member field to keep track of the count 
private int mCount = 0; 

public static final String PREFS_NAME = "com.example.myApp.mCount"; 
private SharedPreferences settings = null; 
private SharedPreferences.Editor editor = null; 

/** ADD THIS METHOD **/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); // Always call the superclass method first 
    settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
} 

@Override 
public void onPause() { 
    super.onPause(); // Always call the superclass method first 
    mCount = settings.getInt("mCount", 0); 
} 

@Override 
public void onResume() { 
    super.onResume(); // Always call the superclass method first 
    editor = settings.edit(); /** ADD THIS LINE **/ 
    editor.putInt("mCount", mCount); 
    editor.commit(); 
} 
} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/TextViewCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="@string/hello_world" /> 

<Button 
    android:id="@+id/ButtonCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/TextViewCount" 
    android:layout_alignRight="@+id/TextViewCount" 
    android:layout_marginBottom="22dp" 
    android:text="Count" /> 

</RelativeLayout> 
+4

您想發佈您的LogCat堆棧跟蹤嗎?沒有這個,我們只能猜測。 – 2013-02-10 17:57:58

回答

0

請務必確認您的變量(settingseditor)不爲空...

@Override 
public void onPause() { 
    super.onPause(); // Always call the superclass method first 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    mCount = settings.getInt("mCount", 0); 
} 

@Override 
public void onResume() { 
    super.onResume(); // Always call the superclass method first 
    SharedPreferences.Editor editor = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit(); 
    editor.putInt("mCount", mCount); 
editor.commit(); 
} 
+0

仍然與該更新崩潰 – James 2013-02-10 18:04:20

0

試圖移動getSharedPreferences到Activity.onCreate我不」我認爲這可以在此之前完成。這裏

// Private member field to keep track of the count 
private int mCount = 0; 

public static final String PREFS_NAME = "com.example.myApp.mCount"; 
private SharedPreferences settings; 
private SharedPreferences.Editor editor; 

@Override 
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState); 
    settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    editor = settings.edit(); 
} 
0

看做這樣的。我希望它能幫助你。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout); 
    ..some code. 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    Editor editor = settings.edit(); 
} 
2

你應該在onCreate()被創建SharedPreferences對象;在此之前,它不保證被創建。

另外,你應該在每onResume()打電話edit();否則,你可能會得到那個Editor的舊數據。

public class MainActivity extends Activity { 
    // Private member field to keep track of the count 
    private int mCount = 0; 

    public static final String PREFS_NAME = "com.example.myApp.mCount"; 
    private SharedPreferences settings = null; 
    private SharedPreferences.Editor editor = null; 

    /** ADD THIS METHOD **/ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); // Always call the superclass method first 
     settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); // Always call the superclass method first 
     mCount = settings.getInt("mCount", 0); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); // Always call the superclass method first 
     editor = settings.edit(); /** ADD THIS LINE **/ 
     editor.putInt("mCount", mCount); 
     editor.commit(); 
    } 
} 
+1

好吧剛剛添加,它仍然崩潰 – James 2013-02-10 18:10:35

+0

@詹姆斯我已經編輯了上面的代碼;現在就試試。如果它仍然無效,請使用更新的代碼和LogCat更新您的初始文章。 – Eric 2013-02-10 18:12:45

+1

好吧,我的代碼已更新到現在正在使用的代碼中,但現在它的穩定但是沒有按鈕可以點擊成爲代碼並且沒有文本框ive也將xml置於更新的版本中 – James 2013-02-10 18:38:16