Android 当移动到另一个活动并返回时,如何保存活动状态?

Android 当移动到另一个活动并返回时,如何保存活动状态?,android,android-studio,android-intent,android-activity,android-view,Android,Android Studio,Android Intent,Android Activity,Android View,请帮助我如何保存活动状态 我解释我的问题: 我的计划中有很多活动 我通过以下代码将一个活动的数据发送到“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().ge

请帮助我如何保存活动状态

我解释我的问题:

我的计划中有很多活动

我通过以下代码将一个活动的数据发送到“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);
我在那里没有任何问题

之后

我想通过以下代码将“Dr_see_Patient_Pro”活动中的“idPatient”发送到另一个活动,即(写入历史记录)活动:

 Intent intent=new Intent(this,write_History.class);
    intent.putExtra("idPFf3",idPatient);
    startActivity(intent);
在“书写历史”活动中检索“idPatient”没有问题

但是

当我想从“写病史”活动返回到“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/医生看病人专业

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/写历史

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

    }


}

请帮我找到解决办法

似乎您正在从“Dr_see_Patient_Pro”活动中传递“int”,并试图在“write_history”活动中检索“String”类型,因此您将获得空指针异常。因此,我建议您在“编写历史记录”活动中尝试以下代码

id=getIntent().getIntExtra("idPFf3");