将用户变量保存在sharedpreference中并使用MainActivity连接类?

时间:2016-02-12 09:54:12

标签: java android android-intent sharedpreferences

我必须点击服务,如果响应成真,我必须验证用户&将用户输入的变量保存在共享首选项中。我的网址是:http://a.nextput.com/apps/init/4/a/9fe2d2cbaa8332a4633be17b79208181-2y-10-ELVM4HwkaYaCVu6203Zjfus-G/o?aff_id,它给出的回复是{“成功”:真}。为此,我创建了一个类并声明了一个静态方法。在静态方法内部,我必须进行解析。 我的班级:

public class InitializeSDK {
/*String json = "";
URL url;
HttpURLConnection connection = null;*/
public static void init(final Context ctx, int offerwall_id, String offerwall_public_key) {

new AsyncTask<Void, Void, Void>() {

    protected void onPreExecute() {
        super.onPreExecute();
    }

    protected Void doInBackground(Void... arg0) {
        //TODO: add code to read http request and store the json data in json variable
        String json = "";
        //URL url;
        HttpURLConnection connection = null;
        InputStream is = null;
        final String MyPREFERENCES = "MyPrefs" ;
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://a.nextput.com/apps/init/4/a/9fe2d2cbaa8332a4633be17b79208181-2y-10-ELVM4HwkaYaCVu6203Zjfus-G/o?aff_id");//YOUR URL

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            JSONObject jObj = new JSONObject(json);
            boolean isSuccess = jObj.getBoolean("success");
            System.out.println("success : " + isSuccess);


            // SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    /*SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context ctx);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("isSuccess",isSuccess);
    editor.commit();*/
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

      /* JSONObject jsonObject = new JSONObject(json);
boolean state = jsonObject.getBoolean("success");*/

        return null;

    }

    protected void onPostExecute(Void result) {
        super.onPostExecute(result);


    }

}.execute();
}

我的MainActivity是:

public class MainActivity extends AppCompatActivity {

final Context context = this;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        }

}
}

如何在sharedpreference中保存变量并将类与MainActivity连接?请帮忙

2 个答案:

答案 0 :(得分:0)

执行以下更改。 第1步:将返回类型Void更改为布尔值

new AsyncTask<Void, Void, Boolean>() {}

Step2:在doInBackground中返回“isSuccess”

步骤3:更改下面的onPostExecute()

protected void onPostExecute(boolean result) {
    super.onPostExecute(result);
    if(result){
          PreferenceManager.getDefaultSharedPreferences(this)
            .edit()
            .putInt"offerwall_id", offerwall_id)
            .putString("offerwall_public_key",offerwall_public_key)
            .apply();
   }

}

步骤4:从MainActivity调用

public class MainActivity extends AppCompatActivity {

final Context context = this;

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitializeSDK.init(this,val1,val2);
    }
 }
}

答案 1 :(得分:0)

使InitializeSDK类扩展AsyncTask

public class InitializeSDK extends AsyncTask<Void, Integer, String> {
       Context ctx;
       int offerwall_id;
       String offerwall_public_key;

       public InitializeSDK (Context ctx, int offerwall_id, String offerwall_public_key){
          this.ctx = ctx;
          this.offerwall_id = offerwall_id;
          this.offerwall_public_key = offerwall_public_key;

       }
      //rest of the asynctask code
}

并在您的MainActivity中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int id = //your id;
    String offerwall_public_key = //your key;
    new IntializeSDK(this,id,offerwall_public_key).execute();
 }

您的共享偏好设置代码是正确的,请在OnPostExecute中使用