我正在创建一个应用程序,在我的应用程序中,我得到响应并在自定义警报对话框中显示它,直到这里它工作正常,现在我想要做的是如果用户从警报对话框中选择一个项目,它应该优先存储它,这样就不需要每次都获取数据。
以下是我的代码段。
我得到的以下回应是:
{
"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"
}
]
}
我在警告对话框中显示州名
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();
}
});
}
}
答案 0 :(得分:2)
如果你想存储响应,更好的方法是将内容写入文件。如果你只想存储一些你可以这样做的值
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();
答案 1 :(得分:1)
SharedPreferences
它更适合存储小数据。因此,要保存entire response
,最好将其保存到文件中(例如:.bin
),如下所示:
public static synchronized void saveToFileSystem(Context context, Object object, String binFileName) {
try {
String tempPath = context.getFilesDir() + "/" + binFileName + ".bin";
File file = new File(tempPath);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(object);
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
并且为了阅读它你可以像:
public static synchronized Object readFromFileSystem(Context context, String binFileName) {
Object obj = new Object();
try {
String tempPath = context.getFilesDir() + "/" + binFileName + ".bin";
File file = new File(tempPath);
if (file.exists()) {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
obj = ois.readObject();
ois.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
答案 2 :(得分:0)
我将所选值存储在SharedPreferences中的键中。然后,在启动时,您将能够加载SharedPreferences以检查您是否已经有值(在这种情况下,您可以完全重新加载JSON)
指南here。
IMMO,如果您只是想存储一个值,那么保存文件是没用的。这就是应该使用SharedPreferences的地方:即使你关闭应用程序并重新启动它们,它们也会被保留。
答案 3 :(得分:0)
状态数据多年来不会发生变化,因此您可以保留此json data in assets并从中使用它或将其保存在static map中。而不是调用webservice来获取它。
要保留所选值,您可以使用SharedPreferences
并在其中存储状态id
。下次每当您通知状态列表时,您可以检查共享首选项并选择保存的那个。
答案 4 :(得分:0)
基本上你可以检查是否存储了偏好的值。
你可以在onCreate()方法上做到这一点:
检查是否存在偏好值
如果是:
然后无需调用AsyncTask
如果没有:
然后进行AsyncTask调用
代码:
String statename = preferences.getString("STATE_NAME<name you gave while committing for first time>,"");
if(statename!=""){
//Then directly go inside main activity
}
else{
//Make AsyncTask Call
}
答案 5 :(得分:0)
您可以使用优先存储整个对象类 gson.jar file -> click here
并使用它......
static public void setPreferenceObject(Context c, Object modal,String key) {
/**** storing object in preferences ****/
SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(
c.getApplicationContext());
Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String jsonObject = gson.toJson(modal);
prefsEditor.putString(key, jsonObject);
prefsEditor.commit();
}
static public Object getPreferenceObjectJson(Context c,String key) {
SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(
c.getApplicationContext());
/**** get user data *****/
String json = appSharedPrefs.getString(key, "");
Gson gson=new Gson();
User selectedUser=gson.fromJson(gsonString, User.class);
return selectedUser;
}
答案 6 :(得分:0)
您可以使用共享首选项中的键轻松地将 JSON文件完全保存为字符串变量,并在您再次阅读时将其解析。
答案 7 :(得分:0)
将JSON对象存储为共享首选项的最简单方法是 只需使JSONObject最后将值添加到JSONObject并使用 toString
保存到首选项 private void storeDataToPref() {
SharedPreferences sharedPreferences = getSharedPreferences("localpref", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "hello");
jsonObject.put("number", "aaaa");
android.util.Log.d("response", jsonObject.toString());
editor.putString("pref_data", jsonObject.toString()).commit();
} catch (JSONException json) {
}
}
要从共享首选项中获取结果,首先将所有读取的字符串转换为jsonobject并获取您希望解决的希望值,这将对所有人有帮助
private void getDataFromPref() {
SharedPreferences sharedPreferences = getSharedPreferences("localpref", MODE_PRIVATE);
String value = sharedPreferences.getString("pref_data", "");
try {
JSONObject jsonObject = new JSONObject(value);
String name = jsonObject.getString("name");
String number = jsonObject.getString("number");
android.util.Log.d("result", name + "...." + number);
} catch (Exception e) {
}
}