我已经创建了一个单独的asynctask
,我将一些值存储到android中的共享首选项中,但我在所有其他活动中获取这些值。当我试图在asynctask
中获取此共享首选项值时,它会给我一个nullpointer
异常,我认为这是因为上下文,但我不知道如何解决它。
的AsyncTask
public class Updatelocation extends AsyncTask<String, String, Void> {
private Context mContext;
public Updatelocation(Context context) {
mContext = context;
}
String reg_no = Pref.getValue(mContext, Const.PREF_REG, "");
String udid = Pref.getValue(mContext, Const.PREF_REG, "");
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
}
@Override
protected Void doInBackground(String... arg0) {
System.out
.println(":::::::::::::::::::::::::::::Registration and udid:::::::::::::::::::::::"
+ reg_no + "=========" + udid);
String updateURL = Const.API_UPDATE_LOCATION + "?UDID=" + udid
+ "&latitude=" + arg0[0] + "&longitude=" + arg0[1]
+ "®istration_no=" + reg_no;
updateURL = updateURL.replace(" ", "%");
BackendAPIService sh = new BackendAPIService();
System.out.println(":::::::::::::UPDATE URL:::::::::::;" + updateURL);
String jsonStr = sh.makeServiceCall(updateURL, BackendAPIService.POST);
Log.d("Response: ", "> " + jsonStr);
System.out.println("=============MY RESPONSE==========" + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
}
}
答案 0 :(得分:0)
尝试在doInBackgroud参数中传递您的活动并尝试以下代码:
Activity activity = (Activity) params[0];
Long newLong = Long.valueOf(0000);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
Long lastDate = prefs.getLong(DATETIMEKEY, newLong);
对我而言,它运作正常。
我认为问题是在构造函数中传递上下文。
答案 1 :(得分:0)
您的NullPointerException
来自以下几行:
String reg_no = Pref.getValue(mContext, Const.PREF_REG, "");
String udid = Pref.getValue(mContext, Const.PREF_REG, "");
这两个字符串被定义为UpdateLocation
类的属性。这意味着它们在构造函数被调用之前被实例化,并且 - 此时 - 您的mContext
值为null。这就是当您尝试从首选项中获取值时获得NPE
的原因。
要解决此问题,您必须将这些行放入构造函数中:
private Context mContext;
String reg_no;
String udid;
public Updatelocation(Context context) {
mContext = context;
reg_no = Pref.getValue(mContext, Const.PREF_REG, "");
udid = Pref.getValue(mContext, Const.PREF_REG, "");
}