android - 移动到另一个活动并返回时如何保存活动状态?
问题描述
请帮助我如何保存活动状态?
我解释我的问题:
我的计划中有很多活动
我通过以下代码将数据从一个活动发送到“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”发送到另一个活动,即(write_history)活动:
Intent intent=new Intent(this,write_History.class);
intent.putExtra("idPFf3",idPatient);
startActivity(intent);
而且我在“write_history”活动中检索“idPatient”没有问题
但
当我想从“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);
}
}
请帮助我找到解决方案!
解决方案
似乎您正在从您的活动“Dr_see_Patient_Pro”中传递“int”并尝试在您的“write_history”活动中检索“String”类型,因此您得到空指针异常。因此,我建议您在“write_history”活动中尝试以下代码。
id=getIntent().getIntExtra("idPFf3");
推荐阅读
- c# - Httpclient multipart/form-data 推送图片
- c# - 自定义类数组一次将值设置为两个元素
- postgresql - PostgreSQL:更改多个 PK/id,同时将其关系保留在其他表中
- python - pytorch 是否具有计算相关系数矩阵的功能,例如 numpy.corrcoef ()
- authentication - 无 Microsoft ID 平台和 OpenID Connect 协议登录参数
- python - 在python中并行运行多个函数
- algorithm - 用图论算法解决房屋绘图问题
- spring-webflux - 使用 r2DBC MSSQL 库,如果使用 'IN' 子句运行本机查询,则会导致异常
- javascript - 使用 Javascript 更改 HTML 的内部元素以呈现 Django For Loop
- python - 将带有缩进的字符串转换为括号