2012-10-05 172 views
0

當我有做一個ArrayList:NullPointerException異常啓動活動

 ArrayList<Integer> id = new ArrayList<Integer>(); 
    for (int i = 0; i <= 20; i++) { 
    id.add(getResources().getIdentifier("q"+i, "raw", getPackageName()));} 

這種方法稍加改動之前的工作不錯,但現在有強制關閉! 和我得到這個logcat的:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{yaAli.package313.hossein110/yaAli.package313.hossein110.know}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)at android.app.ActivityThread.access$600(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java) 
at android.os.Handler.dispatchMessage(Handler.java) 
at android.os.Looper.loop(Looper.java) 
at android.app.ActivityThread.main(ActivityThread.java) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at yaAli.package313.hossein110.know.onCreate(know.java:33) 
at android.app.Activity.performCreate(Activity.java) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) 
... 12 more 

這裏是我的OnCreate():

@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.basetxt);   
    SharedPreferences settings=PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    ln=settings.getString("LASTREADln", null); 
    if(ln.equals("-1")){ln="0";} 
    if(ln!=null){ 
    final ScrollView s1=(ScrollView) findViewById(R.id.sV1); 
    s1.post(new Runnable() {@Override 
    public void run() {s1.scrollTo(0, Integer.valueOf(ln));} });} 

    final MediaPlayer mp1=MediaPlayer.create(getBaseContext(), R.raw.arza); 

    String pos = getIntent().getStringExtra("key"); 
    String arr = getIntent().getStringExtra("list"); 


    TextView tvfa = (TextView)findViewById(R.id.TEXT313); 

    String fontPath = "fonts/font1.ttf"; 
    String fontPath1 = "fonts/font2.ttf"; 

    Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 
    Typeface tf1 = Typeface.createFromAsset(getAssets(), fontPath1); 

    SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    tvfa.getRootView().setKeepScreenOn(sharedpreferences.getBoolean("scrnon", false)); 
    String sizefa= sharedpreferences.getString("fontsizefa",null); 
    String colorfa= sharedpreferences.getString("fontcolorfa",null);   
    boolean style= sharedpreferences.getBoolean("appfont", false); 
    boolean music= sharedpreferences.getBoolean("musictype", false); 
    boolean curr= sharedpreferences.getBoolean("currputfont", false); 

String t = read(file(pos,arr,null)); { 

if (curr){tvfa.setText(PersianReshape.reshape(t));}else{tvfa.setText(t);} // Txt 
tvfa.setTextSize(1, Float.valueOf(sizefa).floatValue());     // Size 
tvfa.setTextColor(Color.parseColor(colorfa));        // Color 
if (style) { tvfa.setTypeface(tf1); } else {tvfa.setTypeface(tf);}   // Type 
if (music) { mp1.start(); } else { mp1.stop(); } }}       // Play 
//---------------------------------------------------------------------------- 
+3

顯而易見:'yaAli.package313.hossein110.know.onCreate(know.java:33)'會發生什麼? – njzk2

+0

另外 - 如果您使用推薦的Eclipse環境(我嘗試過的唯一一個),那麼調試非常容易。你是否突出了該行,並通過了所有函數來查看null在哪裏蔓延? – cloudfeet

+0

你的onCreate()方法中有一個空指針。 – Shark

回答

2

java開發的最佳實踐是讓文字字符串執行.equals調用。所以不是:

var.equals("string") 

你這樣做:

"string".equals(var) 

這可以保證在做字符串比較時,你將永遠不會有一個空指針異常。

另外,它看起來像是將數值存儲爲字符串。任何特定的原因,你不存儲他們作爲整數?

+0

謝謝,問題與「字符串」.equals(var)解決! – hossein

+0

exu,我得到logcat上的新錯誤! – hossein

1

它可能在這裏

ln=settings.getString("LASTREADln", null);

這應該是

ln=settings.getString("LASTREADln", "");

因爲null設置爲您的默認值,如果該鍵不存在或包含任何內容,所以如果它不包含任何內容,您應該將其設置爲「」,並且對於字符串比較,您應該查找!ln.contentsEquals("")而不是檢查它是否爲空

對於從首選項文件獲得的所有字符串也是如此。將默認值設置爲""而不是null

+0

謝謝,解決了! – hossein

+0

如果這有助於您向上投票,如果它解決了您的主要問題,請將其標記爲正確 – CQM

相關問題