2013-11-05 91 views
1

我有4個數組,我需要能夠保存和加載到sharedpreference:加載數據(JSON陣列)

String[] debtName = new String[10]; 
String[] debtAmount = new String[10]; 
String[] debtRate = new String[10]; 
String[] debtPayment = new String[10]; 

下面是我的全部活動:

import java.util.Arrays; 

import org.json.JSONArray; 
import org.json.JSONException; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TableRow.LayoutParams; 
import android.widget.TextView; 

public class DebtList<T> extends Activity { 

    String[] debtName = new String[10]; 
    String[] debtAmount = new String[10]; 
    String[] debtRate = new String[10]; 
    String[] debtPayment = new String[10]; 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.debtlist); 

     JSONArray nameJSONArray = new JSONArray(Arrays.asList(debtName)); 
     JSONArray amountJSONArray = new JSONArray(Arrays.asList(debtAmount)); 
     JSONArray rateJSONArray = new JSONArray(Arrays.asList(debtRate)); 
     JSONArray paymentJSONArray = new JSONArray(Arrays.asList(debtPayment)); 

     Bundle extras = getIntent().getExtras(); 

     int trigger = 0; 

     //Load Data 
     SharedPreferences sharedPrefs= getSharedPreferences("chaosdata", 0); 
     //public static JSONArray loadJSONArray(Context c, String prefName, String key) 
     ////JSONSharedPreferences.saveJSONArray(this.getApplicationContext(), "prefName", "prefKey", nameJSONArray); 

     String jsonString = sharedPrefs.getString("debtNames", "1234"); 
     if (jsonString != null) { 
      JSONArray jsonArray; 
      try { 
       jsonArray = new JSONArray(jsonString); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        debtName[i] = jsonArray.optString(i); 
       } 
      } catch (JSONException e) { 
      } 
     } 




     //End Load 

     for (int i=0;i<10;i++) 
     { 
      if (debtName[i] == null && extras != null && trigger==0) 
      { 
       debtName[i] = extras.getString("debtName"); 
       debtAmount[i] = extras.getString("debtAmount"); 
       debtRate[i] = extras.getString("debtRate"); 
       debtPayment[i] = extras.getString("debtPayment"); 
       trigger = 1; 
      } 
     } 

     TableLayout tl = (TableLayout) findViewById(R.id.debtListTableView); 
     for (int i=0;i<10;i++) 
     { 
      if (debtName[i] != null) 
      { 

       TableRow tr = new TableRow(this); 
       TextView tv0 = new TextView(this); 
       TextView tv1 = new TextView(this); 
       TextView tv2 = new TextView(this); 
       TextView tv3 = new TextView(this); 
       TableRow.LayoutParams trlp = new TableRow.LayoutParams(); 
       tv0.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f)); 
       tv1.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f)); 
       tv2.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f)); 
       tv3.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f)); 
       trlp.span = 3; 
       tr.setLayoutParams(trlp); 
       tv0.setText("" + debtName[i]); 
       tv1.setText("" + debtAmount[i]); 
       tv2.setText("" + debtPayment[i]); 
       tv3.setText("Holder"); 
       tr.addView(tv0); 
       tr.addView(tv1); 
       tr.addView(tv2); 
       tr.addView(tv3); 
       tl.addView(tr); 
      } 
     } 

     //Save Data 
     JSONSharedPreferences.saveJSONArray(this.getApplicationContext(), "chaosdata", "debtNames", nameJSONArray); 
     JSONSharedPreferences.saveJSONArray(this.getApplicationContext(), "chaosdata", "debtAmounts", amountJSONArray); 
     JSONSharedPreferences.saveJSONArray(this.getApplicationContext(), "chaosdata", "debtRates", rateJSONArray); 
     JSONSharedPreferences.saveJSONArray(this.getApplicationContext(), "chaosdata", "debtPayments", paymentJSONArray); 
     //End Save 


    } 

    public static class JSONSharedPreferences { 
     private static final String PREFIX = "json"; 

     public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) { 
      SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putString(JSONSharedPreferences.PREFIX+key, array.toString()); 
      editor.commit(); 
     } 

     public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException { 
      SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
      return new JSONArray(settings.getString(JSONSharedPreferences.PREFIX+key, "[]")); 
     } 

     public static void remove(Context c, String prefName, String key) { 
      SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
      if (settings.contains(JSONSharedPreferences.PREFIX+key)) { 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.remove(JSONSharedPreferences.PREFIX+key); 
       editor.commit(); 
      } 
     } 

    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.debt_list, menu); 
     return true; 
    } 

} 

運行時它不會拋出任何錯誤。我遇到的問題是如何將數據檢索回JSON數組,然後返回到數組,以便我可以在應用程序的其他部分處理數據。

+0

見編輯的版本上面 – jpgerb

回答

0
public static String getPref(String key, Context context) { 
    SharedPreferences preferences= c.getSharedPreferences(prefName, 0); 
    return preferences.getString(key, null); 
} 

使用上述方法通過將鑰匙插入方法

+0

基於 「公共靜態JSONArray loadJSONArray」 我怎麼會檢索JSONArray? – jpgerb

0

檢索數據回陣列中獲得數據,你必須遍歷JSONArray:

String jsonString = prefs.getString("key", null); 
if (jsonString != null) { 
    JSONArray jsonArray; 
    try { 
     jsonArray = new JSONArray(jsonString); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      debtName[i] = jsonArray.optString(i); 
     } 
    } catch (JSONException e) { 
    } 
} 

爲了澄清,這裏是我用於測試的代碼:

在MainAcitivity:

String[] debtName = {"Douglas", "Fabiano", "Drumond"}; 
SharedPreferences prefs = getSharedPreferences("com.douglasdrumond.test.prefs", Context.MODE_PRIVATE); 
Editor editor = prefs.edit(); 
JSONArray nameJSONArray = new JSONArray(Arrays.asList(debtName)); 
editor.putString("com.douglasdrumond.test.debtName", nameJSONArray.toString()); 
editor.commit(); 

在SecondActivity:

String[] debtName = new String[3]; 
SharedPreferences prefs = getSharedPreferences("com.douglasdrumond.test.prefs", Context.MODE_PRIVATE); 
String jsonString = prefs.getString("com.douglasdrumond.test.debtName", null); 
if (jsonString != null) { 
    JSONArray jsonArray; 
    try { 
     jsonArray = new JSONArray(jsonString); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      debtName[i] = jsonArray.optString(i); 
     } 
    } catch (JSONException e) { 
    } 
} 
+0

它沒有返回任何值,但它沒有提供錯誤 – jpgerb

+0

jsonString爲空還是爲空? –