我正在尝试使用JSON显示数据,具体取决于“共享首选项”,但是它不起作用。是否应该将共享首选项更改为全局变量?
//Fetching email from shared preferences
SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
String email = sharedPreferences.getString(Config.EMAIL_SHARED_PREF,"Not Available");
这是我采用共享首选项的代码。我想显示以下代码:
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(MapsActivity.this, "Json Data is downloading", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String url = "http://192.168.43.176/GOLearn/lokasi.php?id="+email;
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("lokasi");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("id");
String name = c.getString("name");
String latitude = c.getString("latitude");
String longitude = c.getString("longitude");
// tmp hash map for single contact
HashMap<String, String> map = new HashMap<>();
// adding each child node to HashMap key => value
map.put("id", id);
map.put("name", name);
map.put("latitude", latitude);
map.put("longitude", longitude);
//contact.put("mobile", mobile);
// adding contact to contact list
dataList.add(map);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG).show();
}
});
}
return null;
}
请帮忙
最佳答案
方法getSharedPreferences()不是AsyncTask中定义的方法,而是为Context或Activity对象定义的方法。
这里最好的方法可能是将Context传递给AsynkTask,您应该使用AsyncTask的构造器进行此操作。
public GetContacts(Context ctx){
context = ctx;
}
自然地,您在GetContacts类中定义了
Context context
属性。有了AsyncTask中可用的上下文,您可以执行以下操作:
SharedPreferences sharedPreferences = context.getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
并且您的SharedPreferences将在AsyncTask内部起作用。
关于android - 如何显示来自MySQL的数据取决于android中的共享首选项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41540655/