我有主要活动和onClick方法我正在执行JsonTask
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.blogin:
new JsonTask().execute("https://www.aboutmyclinic.com/android/index.php","login" );
break;
}
我创建了一个名为JsonTask的帮助文件,用于将post参数传递给服务器并从服务器获取json响应
public class JsonTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {...
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
JSONObject json = null;
String sucessvalue = null;
String errorvalue = null;
String token = null;
try {
json = new JSONObject(result);
sucessvalue = json.getString("Success");
} catch (JSONException e) {
e.printStackTrace();
}
if (sucessvalue != null) {
new Preferences().PutExtra("Success",sucessvalue);
} else {
// Content.setText(result);
}
}
}
我有另一个名为Preferences的帮助文件来获取和设置sharedPreferences。这是代码
public class Preferences extends AppCompatActivity {
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs" ;
public Preferences(){
sharedpreferences =getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
}
public void PutExtra(String key, String value)
{
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(key, value);
editor.commit();
}
public String getExtra(String key, String defaultValue)
{
return sharedpreferences.getString(key, defaultValue);
}
}
我收到错误
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
我无法从首选项助手文件中的主要活动中获取上下文。 任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
您需要将上下文传递给偏好设置类
首先改变建构者
public Preferences(Context context){
sharedpreferences = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
}
然后像这样调用函数
new Preferences(context).PutExtra("Success",sucessvalue);
其中
context = CurrentActivity.this;
答案 1 :(得分:0)
我修改了你的代码
您的Preference Helper类不应扩展Appcompat活动
public class PreferencesHelper {
private static PreferencesHelper preferenceHelperInstance;
private PreferencesHelper() {
}
public static PreferencesHelper getPrefernceHelperInstace() {
if (null == preferenceHelperInstance) {
preferenceHelperInstance = new PreferencesHelper();
}
return preferenceHelperInstance;
}
public static final String MyPREFERENCES = "MyPrefs";
public void PutExtra(Context context, String key, String value) {
context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE).edit().putString(key, value).commit();
}
public String getExtra(Context context, String key, String defaultValue) {
return context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE).getString(key, defaultValue);
}
}
在Constructor
的帮助下将上下文传递给JSON执行程序public class JsonTask extends AsyncTask<String, String, String> {
private Context mContext;
//Pass Context
public JsonTask(Context context) {
this.mContext = context;
}
@Override
protected String doInBackground(String... params) {...
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
JSONObject json = null;
String sucessvalue = null;
String errorvalue = null;
String token = null;
try {
json = new JSONObject(result);
sucessvalue = json.getString("Success");
} catch (JSONException e) {
e.printStackTrace();
}
if (sucessvalue != null) {
//Get Preferences
PreferencesHelper.getPrefernceHelperInstace().PutExtra(mContext, "Success", sucessvalue);
} else {
// Content.setText(result);
}
}
}
最后像这样为
注入异步任务和PreferenceHelper的上下文新 JsonTask(getApplicationContext())。执行( “https://www.aboutmyclinic.com/android/index.php”, “登录”);