Получение String[] из JSONObject из sharedPreferences

Я следил за ответом Микерса хранить и извлекать объект класса в общих настройках

Но как мне вернуть STring[] из JSOnObject?

мой класс:

public class AppearExamState implements Serializable{
    private static final long serialVersionUID = 1L;

    Boolean flag = false;
    int questionId;
    int subjectId;
    String[] storedAnswers;

    public AppearExamState(int q, int subjId, String[] ans, boolean flg){
        questionId = q;
        subjectId = subjId;
        storedAnswers = ans;
        flag = flg;
    }  .......
.........getters and setters.....

.......
//-----------------------------------------------------------------
// Here I convert myObject to JsonObject
//-----------------------------------------------------------------
    public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        try {
            obj.put("Qid", this.questionId);
            obj.put("Stored_Ans", this.storedAnswers);// is this RIGHT??
            obj.put("subj_id", this.subjectId);
            obj.put("Flag", this.flag);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return obj;
    }

Теперь, когда я сохраняю в sharepref, я последовал ответу мыши и сделал это:

  //--------------------------------------------------------------------------------------

    public void sendSharedPreference(ArrayList<AppearExamState> arrayl){
        SharedPreferences mPrefs = this.getSharedPreferences("aimmds_state", 0);
        SharedPreferences.Editor prefsEditor = mPrefs.edit();
        Set<String> set= new HashSet<String>();
        for (int i = 0; i < arrayl.size(); i++) {
            set.add(arrayl.get(i).getJSONObject().toString());
        }
        prefsEditor.putStringSet("aimmds_state", set);
        prefsEditor.commit();

        }
//--------------------------------------------------------------------------------------

и я застрял здесь без понятия, как это сделать

 public  ArrayList<AppearExamState> loadFromStorage(Context c) {
        SharedPreferences mPrefs = c.getSharedPreferences("aimmds_state", 0);

        ArrayList<AppearExamState> items = new ArrayList<AppearExamState>();

        Set<String> set = mPrefs.getStringSet("aimmds_state", null);
        for (String s : set) {
            try {
                JSONObject jsonObject = new JSONObject(s);
                int Quesid = jsonObject.getInt("Qid");
                int SubjId = jsonObject.getInt("subj_id");
                Boolean flag = jsonObject.getBoolean("Flag");
                String[] StoAnswer =   ????? ;

                AppearExamState myclass = new AppearExamState(Quesid, SubjId, StoAnswer, flag );

                items.add(myclass);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        return items;
    }

person swati saoji    schedule 28.02.2014    source источник


Ответы (1)


Вы не можете поместить массив в JSON, но вы можете поместить Collection, который представлен JSONArray (http://www.json.org/javadoc/org/json/JSONObject.html#put%28java.lang.String,%20java.util.Collection%29). Итак, правильный способ поместить ваш массив в JSONObject:

obj.put("Stored_Ans", new JSONArray(this.storedAnswers));

и чтобы получить:

JSONArray jsonArray = jsonObject.getJSONArray("Stored_Ans");
String[] StoAnswer = new String[jsonArray.length()];
for(i = 0; i < jsonArray.length(); i++){
    StoAnswer[i] = jsonArray.getString(i);
}
person nikis    schedule 28.02.2014