如何在android中访问辅助文件的应用程序上下文

时间:2016-05-26 08:32:24

标签: android sharedpreferences

我有主要活动和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

我无法从首选项助手文件中的主要活动中获取上下文。 任何帮助,将不胜感激。谢谢。

2 个答案:

答案 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”,   “登录”);