【问题标题】:How to JSON Parse URL from SharePreference With AsyncTask, Can't execute URL from SharePreference如何使用 AsyncTask 从 SharedPreferences 解析 URL,无法从 SharedPreferences 执行 URL
【发布时间】:2019-10-21 11:23:18
【问题描述】:

如何使用 AsyncTask 对来自 SharePreference 的 URL 进行 JSON 解析,但无法从 SharePreference 执行 URL。但是当 URL iset Manual From Activity 不是来自 getString SharePreference 结果是可以的。

保存分享偏好

SharedPreferences.Editor editor;
SharedPreferences pref = getSharedPreferences("Options", Context.MODE_PRIVATE);
editor = pref.edit();

String a = String.valueOf(obj.texta);
                    byte[] idsek64 = Base64.encode(a.getBytes(), Base64.DEFAULT);
                    String idsek64siap = new String(idsek64);
                    String idsekrot13 = rot13(idsek64siap);
                    String UrlSek = "https://128.60.12.111/contacts/"+idsekrot13+"/id?_s=ARLlBQWRAR";
                    editor.putString("proc",UrlSek);
                    editor.commit();

从 SharePreference 和 Proses 中获取数据 我从 SharePreference 和 SharePreference 字符串存储中获取的字符串是合适的,我在放置 Toast 时证明了它们。

SharedPreferences pref = getSharedPreferences("Options", Context.MODE_PRIVATE);
        String urls = pref.getString("proc","");
if (HttpHandler.isNetworkAvailable(MainActivity.this)) {
            new MyTask().execute(urls);

        } else {

Toast.makeText(MainActivity.this, "NO INTERNET!", Toast.LENGTH_LONG).show();
        }

//PROSES MYTASK EXECUTE URL
    class MyTask extends AsyncTask<String, Void, String> {
        ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading...");
            pDialog.setCancelable(true);
            pDialog.show();

        }

        @Override
        protected String doInBackground(String... params) {
            return HttpHandler.getJSONString(params[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if (null != pDialog && pDialog.isShowing()) {
                pDialog.dismiss();
            }
            if (null == result || result.contains("[]")) {
                customtoast2.show();
            } else {
                try {
                    JSONArray jsonArray = new JSONArray(result);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONArray subArray = jsonArray.getJSONArray(i);

但是当我设置 urls 手册看起来像:

String urls ="https://128.60.12.111/contacts/curent_job/id?_s=ARLlBQWRAR"
if (HttpHandler.isNetworkAvailable(MainActivity.this)) {
            new MyTask().execute(urls);

        } else {
    ....
}

出来的结果会是我想要的。

如果有人帮助我非常感激。

【问题讨论】:

  • 你真的把 url 放在 SharePreference 中了吗?显示那些代码
  • 展示如何将 URL 放入 SharedPreferences。
  • 您在哪里保存和在哪里检索?显示这些特定代码
  • @Md.Asaduzzaman 是的,但我已经更新了我的问题
  • @VladyslavMatviienko 好的,我已经更新了我的问题。请检查。

标签: java android json parsing


【解决方案1】:

我认为你的存储部分有问题。

 public class SharedPrefsActivity extends Activity {

 public static final String PREFS_NAME = "MyApp_Settings";

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

  // Writing data to SharedPreferences
  Editor editor = settings.edit();
  editor.putString("key", "some value");
  editor.commit();

  // Reading from SharedPreferences
  String value = settings.getString("key", "");
  Log.d(TAG, value);
 }
}

您是否使用此“选项”来存储?还是您使用具有两个不同标签的两个实例? .最好使用相同的 SharedPreferences 实例或相同的标签 确保你的存储没问题,祝你好运

【讨论】:

    【解决方案2】:

    使用 PrefsUtils 类而不是像这样保存它。

    /**
    * A pack of helpful getter and setter methods for reading/writing to {@link SharedPreferences}.
    */
    final public class SharedPrefsUtils {
    private SharedPrefsUtils() {}
    
    /**
     * Helper method to retrieve a String value from {@link SharedPreferences}.
     *
     * @param context a {@link Context} object.
     * @param key
     * @return The value from shared preferences, or null if the value could not be read.
     */
    public static String getStringPreference(Context context, String key) {
        String value = null;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        if (preferences != null) {
            value = preferences.getString(key, null);
        }
        return value;
    }
    
    /**
     * Helper method to write a String value to {@link SharedPreferences}.
     *
     * @param context a {@link Context} object.
     * @param key
     * @param value
     * @return true if the new value was successfully written to persistent storage.
     */
    public static boolean setStringPreference(Context context, String key, String value) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        if (preferences != null && !TextUtils.isEmpty(key)) {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString(key, value);
            return editor.commit();
        }
        return false;
     }
    }
    

    在您的活动中添加以下行以设置为首选项

    SharedPrefsUtils.setStringPreference(this,"your_key","your_value");

    获取首选项值使用

    SharedPrefsUtils.getStringPreference(this,"your_key");

    【讨论】:

    • 我认为问题在于解析 url 而不是存储或读取数据。因为我的编译显示 TOAST 和我从 sharepreference 中获取的字符串,所以它看起来绝对正确
    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多