Lania Fatah Ответов: 0

Как сохранить состояние активности при переходе к другому виду деятельности и обратно?


Пожалуйста, помогите мне, как сохранить состояние активности?
Я объясняю свою проблему:
У меня есть много мероприятий в моей программе
Я отправляю данные из одного действия в действие "Dr_see_Patient_Pro" следующим кодом:

Intent i=new Intent(this,Dr_see_Patient_Pro.class);
   i.putExtra("idPFf2",id);
   startActivity(i);


Поэтому я извлекаю эти данные в действии" Dr_see_Patient_Pro " следующим образом:
idPatient= getIntent().getExtras().getString("idPFf2");
   int id=Integer.parseInt(idPatient);


И у меня там нет никаких проблем
А после
Я хочу отправить "idPatient" в действии "Dr_see_Patient_Pro" в другое действие, которое является (write_history) действием по следующему коду:

Intent intent=new Intent(this,write_History.class);
    intent.putExtra("idPFf3",idPatient);
    startActivity(intent);


И у меня нет никаких проблем, чтобы получить "idPatient" в действии "write_history"
НО
Когда я хочу вернуться из действия "write_history" в действие "Dr_see_Patient_Pro", у меня возникает проблема и эта ошибка:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.Dr_see_Patient_Pro}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    at android.app.ActivityThread.access$600(ActivityThread.java:130)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
    at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298)
    at com.example.myapplication.Dr_see_Patient_Pro.onCreate(Dr_see_Patient_Pro.java:37)
    at android.app.Activity.performCreate(Activity.java:5008)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)




и проблема находится в строке 37 и это код строки 37:
System.out.println(idPatient)


Что я уже пробовал:

И это код моей деятельности: 1/ Dr_see_Patient_Pro

public class Dr_see_Patient_Pro extends AppCompatActivity {

TextView tx, tx1, tx2, tx3, tx4, tx5, tx6;
public static String getInList;
MyDB db;

public  String idPatient;


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

    db = new MyDB(this);

    tx=(TextView)findViewById(R.id.dr_nameP);
    tx1=(TextView)findViewById(R.id.dr_ageP);
    tx2=(TextView)findViewById(R.id.dr_genderP);
    tx3=(TextView)findViewById(R.id.dr_cityP);
    tx4=(TextView)findViewById(R.id.dr_phoneP);




     idPatient= getIntent().getExtras().getString("idPFf2");
    System.out.println(idPatient);

    int id=Integer.parseInt(idPatient);


    ///phone

    Cursor dataname = db.getPaientInfo(id);

    while (dataname.moveToNext()) {
        String name1 = dataname.getString(0);
        String name2 = dataname.getString(1);
        tx.setText(name1+" "+name2);
    }



    Cursor dataPhone = db.getPaientInfo(id);
    while (dataPhone.moveToNext()) {
        String name2 = dataPhone.getString(2);
        tx4.setText(name2);
    }


    Cursor dataAge = db.getPaientInfo(id);
    while (dataAge.moveToNext()) {
        String name2 = dataAge.getString(3);
        tx1.setText(name2);
    }


    Cursor dataGender = db.getPaientInfo(id);
    while (dataGender.moveToNext()) {
        String name2 = dataGender.getString(4);
        tx2.setText(name2);
    }


    Cursor dataCity = db.getPaientInfo(id);
    while (dataCity.moveToNext()) {
        String name2 = dataCity.getString(5);
        tx3.setText(name2);
    }







}


public void writeHistory(View v){
    Intent intent=new Intent(this,write_History.class);
    intent.putExtra("idPFf3",idPatient);
    startActivity(intent);
}



public void SeeHistory(View view){
    Intent intent=new Intent(this,see_history.class);
    startActivity(intent);
}






2/write_history

public class write_History extends AppCompatActivity {

    MyDB myDB;
    String raport,charasar;
    AlertDialog.Builder builder;

    TextInputLayout edt;
    TextInputEditText edt1;

    EditText edt2;

    public String drID,DrIdS;
    public  int idDr;
public  int id;
public  String idPatient;


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

        myDB = new MyDB(this);

        builder = new AlertDialog.Builder(this);

        edt=findViewById(R.id.edt1);
        edt1=findViewById(R.id.edtText1);


        edt2=findViewById(R.id.edt2);


         idPatient= getIntent().getExtras().getString("idPFf3");
        System.out.println(idPatient);
         id=Integer.parseInt(idPatient);



        drID= loginPage.Dr();
        Cursor data = myDB.getIDdr(drID);
        while (data.moveToNext()) {
            DrIdS = data.getString(0);
            idDr=Integer.parseInt(DrIdS);
        }


        System.out.println("dr id " + idDr+"   p "+id);




    }



    private boolean validat() {
        String emailInput = edt1.getText().toString();

        if (emailInput.isEmpty()) {
            edt.setError("Field can't be empty");
            return false;
        }

        else {
            edt.setError(null);
            return true;
        }
    }



    public void saveHistory(View view){
        if( !validat()) {
            return;
        }
else {
            DialogMassage();

        }

    }





    public void DialogMassage() {
        myDB = new MyDB(this);

        raport=edt1.getText().toString();
        charasar=edt2.getText().toString();

        setTitle("ئاگاداربە!");
        builder.setMessage("ئایا دڵنیای لە پاشەکەوت کردنی زانیاریەکان؟")
                .setCancelable(false) .setPositiveButton("بەڵێ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        Boolean result=myDB.SaveHistory(raport,charasar,idDr,id);
                        System.out.println(idDr+" "+id);
                        changeA();


                    }
                })
.setNegativeButton("نەخێر", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        dialog.cancel();
        }
        });

        AlertDialog alert = builder.create();
        alert.show();

    }


    public void changeA(){

        Intent i=new Intent(this,Dr_see_Patient_Pro.class);
        i.putExtra("idPFf2",id);
        startActivity(i);

    }


}

David Crow

Вы же понимаете, что это форум быстрых ответов, не так ли? Подробные вопросы и ответы, рекомендуется использовать фактические Android форум.

Подумывали ли вы о том, чтобы проверить, действительно ли ключ существует, прежде чем пытаться его извлечь, например:

if (getIntent().getExtras().containsKey("idPFf2"))
{
    idPatient = getIntent().getExtras().getString("idPFf2");
    System.out.println(idPatient);
    int id = Integer.parseInt(idPatient);
}

0 Ответов