2012-10-15 54 views
1

我在學習SharedPreferences,但遇到錯誤。Android SharedPreferences示例

我的佈局有一個按鈕reeacts的方法doThis

這是我的java:

package com.example.sharedprefs; 

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    int i = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 

    public void doThis (View view){ 
     i++; 
     SharedPreferences sharedPref = getSharedPreferences("FileName",MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = sharedPref.edit(); 
     prefEditor.putInt("userChoice",i); 
     prefEditor.commit(); 
     int number = sharedPref.getInt("userChoice", 0); 
     Toast.makeText(getApplicationContext(), number, Toast.LENGTH_LONG).show(); 
    } 

} 

我可以在logcat中找出唯一的事情就是10-15 19:28:17.707: E/AndroidRuntime(16657): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1

回答

8

你敬酒不正確。你正在向吐司傳遞一個數字,希望它會給出一個字符串,而不是認爲它應該查找一個字符串資源值。嘗試:

Toast.makeText(getContext(), number + "" , Toast.LENGTH_LONG).show(); 

編輯,除此之外,你的代碼是好的。

+0

完美。感謝任何人都可以評論我的「SharedPref」代碼的正確性嗎?它是否正確寫入。 – EGHDK

+0

@ EGHDK,是的,實質上是正確的。然而,我會把它放在自己的方法中。 – AedonEtLIRA

0

你不能讓一個整數類型吐司消息。

你只能把字符串類型的消息參數Toast.makeText方法。

,作爲解決方案,您可以嘗試這些

Toast.makeText(getApplicationContext(), Integer.toString(number), Toast.LENGTH_LONG).show(); 

Toast.makeText(getApplicationContext(), ""+number, Toast.LENGTH_LONG).show(); 

,是的,你的sharedpreference的使用是完全沒有問題。

0

這裏的問題是你使用一個整數值作爲吐司字符串。您必須執行以下操作。

String.valueOf(number); 

Integer.toString(number); 

你sharedpreferences部分是確定的。但有關SharedPreferences的更多信息,您可以訪問這篇文章。 Android SharedPreferences Example

+0

這個問題在5年前回答了......但是謝謝! – EGHDK