【发布时间】:2021-04-04 07:17:03
【问题描述】:
我有一个片段,它调用一个辅助类以便使用 Volley 生成一个 jsonRequest。
根据响应,帮助程序类创建一个自定义对象,但为了设置它,它需要检查存储在 Shared Preferences 中的一些值。
问题是我无法访问辅助类中的 getSharedPreferences。
public class MyDataHandler {
ArrayList<MyItem> itemsArrayList = new ArrayList<>();
public List<MyItem> getAll(Boolean completed, String current, final MyAsyncResponse callBack) {
String url = "https://my.api/" + current;
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
Request.Method.GET,
url,
null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
try {
JSONObject jsonObject = response.getJSONObject(i);
MyItem myItem = new MyItem();
if (!completed) {
SharedPreferences sharedPreferences = getSharedPreferences("MyApp", MODE_PRIVATE); // this doesn't work
if (sharedPreferences.getBoolean("someKey", false)) {
// set properties in MyItem
}
}
itemsArrayList.add(myItem);
} catch (JSONException e) {
e.printStackTrace();
}
}
if (null != callBack) callBack.processFinished(itemsArrayList);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
AppController.getInstance().addToRequestQueue(jsonArrayRequest);
return itemsArrayList;
}
如果此类未附加到任何特定活动,我如何访问共享首选项?
【问题讨论】:
-
您可以让您的 getAll 方法采用额外的最终 Context 参数。然后,在 onResponse 实现中调用 context.getSharedPreferences 而不是 getSharedPreferences。