Получение общих настроек в классе асинхронных задач - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать приложение, которое принимает идентификатор пациента в качестве общего предпочтения и использует этот идентификатор в другом действии для получения записей этого идентификатора.В Основном действии я устанавливаю Общие предпочтения, и это устанавливает значение правильно.Однако в FetchSinglePatientData я не могу получить то же значение общего предпочтения.

PS: до этой ошибки я вообще ничего не получал.Мои коды ниже:

public void getSinglePatient(View v)
    {
        etID = findViewById(R.id.editTextID);
        SharedPreferences sharedPref = getSharedPreferences("patientId", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("patientId",etID.getText().toString());
        editor.apply();

        String xx = sharedPref.getString("patientId","hayamk");
        Log.d("XX","DEGER" + xx);

        //instantiate intent class
        Intent intent=new Intent(MainActivity.this, GetSinglePatient.class);

        //start the activity
        startActivity(intent);
    }

GetSinglePatient, это действие использует fetchSinglePatientData в background.fetchSinglePatientData, как показано ниже:

package project.android.mapd713.college.centennial.com.mapd713application;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class fetchSinglePatientData extends AsyncTask<Void,Void,Void> {

    String data = "";
    String dataParsed = "";
    String singleParsed = "";
    JSONObject myObject;
    private Context ctx;

    public fetchSinglePatientData(Context ctx) {
        this.ctx = ctx;
    }


    @Override
    protected Void doInBackground(Void... voids) {


        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(ctx);
        //String patientId = prefs.getString("patientId", "");
        String xx = sharedPref.getString("patientId","fafafa");
        Log.d("XX2","DEGE2R" + xx);





        Log.i("fonksiyon","ICINE GIRDI");

        try {
            URL url = new URL("https://mapd713prjct.herokuapp.com/patients/5bf63c770fc33ea59c9c3a97");
            Log.i("URL","URL ICINE GIRDI");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            while(line != null) {
                line = bufferedReader.readLine();
                data = data + line;

            }

            myObject = new JSONObject(data);
            myObject.getString("doctor");
            Log.d("DOKTOR BU NE","hmm" + myObject.getString("doctor"));



        } catch (MalformedURLException e) {
            e.printStackTrace();
            System.out.print("HATA 1: " + e);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.print("HATA 2: " + e);
        } catch (JSONException e) {
            e.printStackTrace();
            System.out.print("HATA 3: " + e);
        }


        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        System.out.println("girdi");
        Log.i("onPostExecute","GIRDI");
        GetSinglePatient.mTextViewResult.setText(myObject.toString());
    }
}

И журналы, как показано ниже, с двумя различными входными данными,1) jajaja и 2) хехехе

2018-12-01 22:38:12.360 7470-7470/project.android.mapd713.college.centennial.com.mapd713application D/XX: DEGERjajaja
2018-12-01 22:38:12.816 7470-

7497/project.android.mapd713.college.centennial.com.mapd713application D/XX2: DEGE2Rfafafa
2018-12-01 22:43:05.644 7470-7470/project.android.mapd713.college.centennial.com.mapd713application D/XX: DEGERhehehe
2018-12-01 22:43:05.815 7470-7547/project.android.mapd713.college.centennial.com.mapd713application D/XX2: DEGE2Rfafafa

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

для решения этой проблемы используйте общее предпочтение с определением имени и режима.например:

SharedPreferences SharedPreference = context.getSharedPreferences("defined 
name" , Context.MODE_PRIVATE);
  1. для вставки данных в общие предпочтения без задержки используйте commit () вместо apply ()
editor.commit();
и отправьте ApplicationContext вашему классу асинхронных задач
0 голосов
/ 02 декабря 2018

Я решил проблему с изменением кода ниже:

SharedPreferences sharedPref = getSharedPreferences("patientId", Context.MODE_PRIVATE);

с помощью

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

Это правда, что я использовал два разных метода SharedPreference и, следовательно, я не мог получитьИдентификатор пациентаОднако изменение

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(ctx);

с помощью

SharedPreferences sharedPref = getSharedPreferences("patientId", Context.MODE_PRIVATE);

не работает, так как getSharedPreferences () требует контекст для доступа.

На мой взгляд, это немногонемного сложно с Android.Я предлагаю эти сообщения:

post1 post2

0 голосов
/ 02 декабря 2018

Вы используете два разных способа получить объект SharedPreferences.Сначала вы используете метод Context.getSharedPreferences (), который принимает имя файла настроек.Затем вы используете статический метод PreferenceManager.getDefaultSharedPreferences ().Это приведет к использованию двух разных файлов SharedPreference.Просто выберите тот или иной путь и будьте последовательны, и это должно работать намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...