Как выполнить JSON-разбор URL-адреса из SharePreference с AsyncTask, Невозможно выполнить URL-адрес из SharePreference - PullRequest
0 голосов
/ 21 октября 2019

Как выполнить JSON-разбор URL-адреса из SharePreference С AsyncTask, Невозможно выполнить URL-адрес из SharePreference. Но когда URL iset Manual из Activity, а не из getString SharePreference, результат в порядке.

Сохранить 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 String Store, являются подходящими, и я доказал их, когда поместил тост.

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);

Но когда я установил URL, руководство выглядит так:

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

        } else {
    ....
}

Результаты, которые получатся, будут такими, какими я хочу.

Если кто-нибудь поможет, я очень благодарен.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

используйте класс 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;
 }
}

добавьте строку ниже в своей деятельности, чтобы установить в pref

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

, чтобы получитьзначение prefs использует

SharedPrefsUtils.getStringPreference(this,"your_key");

0 голосов
/ 21 октября 2019

Я думаю, что что-то не так в вашей ячейке для хранения.

 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 или тот же тег, чтобы убедиться, что ваше хранение в порядке, удачи

...