Aditya Vyas - Lakhan Aditya Vyas - Lakhan - 4 months ago 17
JSON Question

store json object to shared preferences?

I am creating an application,In my app I am getting response and displaing it in custom alert dialog, Till here it works fine, Now what I am trying to do is if user selects an item from alert dialog once, it should store it in preference so that no need of fetch the data every time.

Following is my code snippet.

The following response which i am getting is :

{
"states": [
{
"id": "1",
"state_slug": "agra",
"statename": "Agra"
},
{
"id": "2",
"state_slug": "andaman_and_nicobar_islands",
"statename": "Andaman and Nicobar Islands"
},
{
"id": "3",
"state_slug": "andhra_pradesh",
"statename": "Andhra Pradesh"
},
{
"id": "4",
"state_slug": "arunachal_pradesh",
"statename": "Arunachal Pradesh"
},
{
"id": "5",
"state_slug": "assam",
"statename": "Assam"
},
{
"id": "6",
"state_slug": "bihar",
"statename": "Bihar"
},
{
"id": "7",
"state_slug": "bulandshahr",
"statename": "Bulandshahr"
},
{
"id": "8",
"state_slug": "chhattisgarh",
"statename": "Chhattisgarh"
},
{
"id": "9",
"state_slug": "dadra_and_nagar_haveli",
"statename": "Dadra & Nagar Haveli"
},
{
"id": "10",
"state_slug": "daman_and_diu",
"statename": "Daman & Diu"
},
{
"id": "11",
"state_slug": "delhi",
"statename": "Delhi"
},
{
"id": "12",
"state_slug": "farrukhabad",
"statename": "Farrukhabad"
},
{
"id": "13",
"state_slug": "goa",
"statename": "Goa"
},
{
"id": "14",
"state_slug": "gujarat",
"statename": "Gujarat"
},
{
"id": "15",
"state_slug": "haryana",
"statename": "Haryana"
},
{
"id": "16",
"state_slug": "himachal_pradesh",
"statename": "Himachal Pradesh"
},
{
"id": "17",
"state_slug": "jammu_and_kashmir",
"statename": "Jammu & Kashmir"
},
{
"id": "18",
"state_slug": "jharkhand",
"statename": "Jharkhand"
},
{
"id": "19",
"state_slug": "karnataka",
"statename": "Karnataka"
},
{
"id": "20",
"state_slug": "kerala",
"statename": "Kerala"
},
{
"id": "21",
"state_slug": "lakshadweep",
"statename": "Lakshadweep"
},
{
"id": "22",
"state_slug": "madhya_pradesh",
"statename": "Madhya Pradesh"
},
{
"id": "23",
"state_slug": "maharashtra",
"statename": "Maharashtra"
},
{
"id": "24",
"state_slug": "manipur",
"statename": "Manipur"
},
{
"id": "25",
"state_slug": "meghalaya",
"statename": "Meghalaya"
},
{
"id": "26",
"state_slug": "mizoram",
"statename": "Mizoram"
},
{
"id": "27",
"state_slug": "nagaland",
"statename": "Nagaland"
},
{
"id": "28",
"state_slug": "orissa",
"statename": "Orissa"
},
{
"id": "29",
"state_slug": "pondicherry",
"statename": "Pondicherry"
},
{
"id": "30",
"state_slug": "punjab",
"statename": "Punjab"
},
{
"id": "31",
"state_slug": "purulia",
"statename": "Purulia"
},
{
"id": "32",
"state_slug": "rajasthan",
"statename": "Rajasthan"
},
{
"id": "33",
"state_slug": "sikkim",
"statename": "Sikkim"
},
{
"id": "34",
"state_slug": "tamil_nadu",
"statename": "Tamil Nadu"
},
{
"id": "35",
"state_slug": "tripura",
"statename": "Tripura"
},
{
"id": "36",
"state_slug": "uttar_pradesh",
"statename": "Uttar Pradesh"
},
{
"id": "37",
"state_slug": "uttarakhand",
"statename": "Uttarakhand"
},
{
"id": "38",
"state_slug": "west_bengal",
"statename": "West Bengal"
}
]
}


I am displaying statename in my alert dialog,

class LoadAllStates extends AsyncTask<String, String, ArrayList<HashMap<String,String>>> {

ArrayAdapter<String> adapterallstates ;
private ProgressDialog pDialog;

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(true);
// pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));
pDialog.setCancelable(true);
pDialog.show();

}
protected ArrayList<HashMap<String,String>> doInBackground(String... args) {
ServiceHandler sh = new ServiceHandler();

// Making a request to url and getting response
statedata = new ArrayList<HashMap<String, String>>();
String jsonStr = sh.makeServiceCall(STATE_URL, ServiceHandler.GET);

Log.d("Response: ", "> " + jsonStr);

if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
state_list = jsonObj.getJSONArray(COUNTRY_LIST);

// looping through All Contacts
for (int i = 0; i < state_list.length(); i++) {
JSONObject c = state_list.getJSONObject(i);

// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();

// adding each child node to HashMap key => value
map.put(STATE_SLG, c.getString(STATE_SLG));
map.put(STATE_ID, c.getString(STATE_ID));
map.put(STATE_NAME,c.getString(STATE_NAME));

statedata.add(map);

}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}

return statedata;
}

protected void onPostExecute(ArrayList<HashMap<String,String>> result) {

super.onPostExecute(result);
pDialog.dismiss();

String[] arrallstates=new String[statedata.size()];
for(int index=0;index<statedata.size();index++){
HashMap<String, String> map=statedata.get(index);
arrallstates[index]=map.get(STATE_NAME);
}


// pass arrConuntry array to ArrayAdapter<String> constroctor :
adapterallstates = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_dropdown_item,
arrallstates);
spstate.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View w) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("Select")
.setAdapter(adapterallstates, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

spstate.setText(adapterallstates.getItem(which).toString());

try {

String n = state_list.getJSONObject(which).getString("state_slug");


statename=state_list.getJSONObject(which).getString("state_slug");
stnm=state_list.getJSONObject(which).getString(STATE_NAME);

Log.d("Response statenm: ", "> " + statename);

SharedPreferences.Editor editor = sharedpreferences.edit();

editor.putString(States, n);
editor.commit();
new LoadAllStatesCity().execute();

// Toast.makeText(getActivity(), statename, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

dialog.dismiss();
}
}).create().show();
}
});

}
}

Answer

if you want to store the response the better way is to write the content into a file.if you want to store only some values you can do like this

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("key_from_json", "String_value_from_json");
 editor.putInt("key_from_json","int_value_from_json");
 editor.commit();
Comments