2013-05-08 33 views
0

我有以下代碼是專門爲用戶點擊一個按鈕,當他們點擊按鈕時,他們正在查看的特定字符串被收藏並存儲在其他地方。如何正確使用load數組和保存數組方法?

我有兩個問題。

  1. 一個什麼是我現在有什麼問題嗎?因爲它點擊按鈕時會崩潰。

  2. 你將如何完成加載數組方法來加載並保存到數組中的字符串,以便用戶以後可以看到該數組?

感謝您的時間!

fav.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      loadArray("favorites"); 
      favorites = Arrays.copyOf(favorites, favorites.length+1); 
      favorites[favorites.length]=display.getText().toString(); 
      saveArray(favorites, "favorites"); 

     } 
    }); 

    home.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      Intent openStartingPoint = new Intent("starting.rt.Menu2"); 
      startActivity(openStartingPoint); 
     } 
    }); 

    search.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      Intent openStartingPoint = new Intent("starting.rt.Search"); 
      startActivity(openStartingPoint); 
     } 
    }); 

    moreapps.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      Intent goToMarket; 
      goToMarket = new Intent(Intent.ACTION_VIEW, Uri 
        .parse("market://search?q=pub:\"Wompa\"")); 
      startActivity(goToMarket); 
     } 
    }); 

} 

public String[] loadArray(String arrayName) { 
    SharedPreferences prefs = getSharedPreferences("preferencename", 0); 
    int size = prefs.getInt(arrayName + "_size", 0); 
    String array[] = new String[size]; 
    for(int i=0;i<size;i++) 
     array[i] = prefs.getString(arrayName + "_" + i, null); 
    return array; 
} 

public boolean saveArray(String[] array, String arrayName) { 
    SharedPreferences prefs = getSharedPreferences("preferencename", 0); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putInt(arrayName +"_size", array.length); 
    for(int i=0;i<array.length;i++) 
     editor.putString(arrayName + "_" + i, array[i]); 
    return editor.commit(); 
} 

登錄貓

05-08 23:10:51.329: I/Process(495): Sending signal. PID: 495 SIG: 9 
05-08 23:11:02.360: D/dalvikvm(504): GC_EXTERNAL_ALLOC freed 44K, 53% free 2553K/5379K, external 1625K/2137K, paused 221ms 
05-08 23:11:08.599: D/dalvikvm(504): GC_EXTERNAL_ALLOC freed 16K, 51% free 2644K/5379K, external 2707K/3308K, paused 174ms 
05-08 23:11:12.570: D/AndroidRuntime(504): Shutting down VM 
05-08 23:11:12.570: W/dalvikvm(504): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
05-08 23:11:12.599: E/AndroidRuntime(504): FATAL EXCEPTION: main 
05-08 23:11:12.599: E/AndroidRuntime(504): java.lang.NullPointerException 
05-08 23:11:12.599: E/AndroidRuntime(504): at starting.rt.Base$1.onClick(Base.java:52) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.view.View.performClick(View.java:2485) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.view.View$PerformClick.run(View.java:9080) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.os.Handler.handleCallback(Handler.java:587) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.os.Looper.loop(Looper.java:123) 
05-08 23:11:12.599: E/AndroidRuntime(504): at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-08 23:11:12.599: E/AndroidRuntime(504): at java.lang.reflect.Method.invokeNative(Native Method) 
05-08 23:11:12.599: E/AndroidRuntime(504): at java.lang.reflect.Method.invoke(Method.java:507) 
05-08 23:11:12.599: E/AndroidRuntime(504): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-08 23:11:12.599: E/AndroidRuntime(504): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-08 23:11:12.599: E/AndroidRuntime(504): at dalvik.system.NativeStart.main(Native Method) 
05-08 23:11:17.869: I/Process(504): Sending signal. PID: 504 SIG: 9 

回答

1

loadArray函數返回String[]。你可能想使用它像:

String [] arr = loadArray("favorites"); 

該陣列可以在以後爲你在第二部分要求使用。希望這可以幫助。

更新 [基於您的評論]

所以,如果你想抓住在TextView的文本,並希望將其添加到列表/ String數組:

1)儘量得到字符串從TextView的

TextView display = (TextView)findViewById(R.id.display); 
String toSave = display.getText().toString(); 

2)使用`loadArray'獲取從SharedPreferences現有列表:

String [] arr = loadArray("favorites"); 

3)添加新的字符串給它:

ArrayList<String> arrList = new ArrayList<String>(); 

for (int i=0; i<arr.length(); i++) { 
    arrList.add(arr[i]); //add old values to arraylist 
} 
// add new string to it: 
arrList.add(toSave); 

//Get back your array 
String [] array = arrList.toArray(new String[arrList.size()]); 

4)保存一遍。

saveArray(array, "favorites"); 
+0

我不這麼認爲,我明白我該把它放在哪裏以及它如何提供幫助?不過謝謝。 – jacobohunter 2013-05-08 21:55:30

+0

由於您沒有指定哪個按鈕點擊會導致崩潰,所以當您點擊'fav'按鈕時,我認爲它崩潰了。所以我在'fav.setOnClickListener(new View.OnClickListener()'的'OnClick()'裏面看到它可能會導致崩潰,因爲loadArray函數返回的是String [],並且你沒有指定返回參數。它不是問題,請指定哪個按鈕導致錯誤?也發佈錯誤的LogCat。這將是有幫助的。 – 2013-05-08 22:00:21

+0

這是最喜歡的按鈕。對不起,沒有指定。 – jacobohunter 2013-05-08 22:08:39