全局类/变量未由资源库保存



我正在尝试使用全局类使对象数据通过我的所有活动可用。在我的第一个活动中,我正在初始化我的全局类patient,并使用setPatientName设置变量。在我的下一个活动中,我调用"getPatientName",但它返回null。当我尝试设置"getPatientName"的结果时,它给了我错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

编辑:我的第一个活动是从文本字段中收集名称,这就是我试图setPatientName的内容

第一个活动:

 tv2=(TextView)findViewById(R.id.textView2);
 EditText name = (EditText) findViewById(R.id.textView2);
    String nameString = name.getText().toString();
 final Patient p = (Patient) getApplicationContext();
    p.setPatientName(nameString);

第二项活动:

Patient p = (Patient)getApplication();
String patName = p.getPatientName();
tv2.setText(patName);

患者类:

package com.example.imac.chs_pharmacy;
import android.app.Application;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
public class Patient extends Application {
    //private variables
    public String patient_name;
    //default constructor
    public Patient(){
    }
    public Patient(String startPatientName) {
        this.patient_name = startPatientName;
    }
    public void setPatientName( String patientName ){
        Log.d(TAG, "setting patient name");
        this.patient_name = patientName;
    }
    public String getPatientName( ){
        Log.d(TAG, "getting patient name");
        return this.patient_name;
}

清单.xml:

<application android:name="com.example.imac.chs_pharmacy.Patient"

还值得注意的是,在我的Patient课上,我在我的getPatientNamesetPatientName中注销了一个字符串,但它似乎只记录在setPatientName上。我的setPatientName不是因为某种原因被解雇了吗?

不需要扩展Application。尝试如下

public class Patient {
private static Patient patientInstance;
private String patient_name;
//private contrunctor to prevent from creating patient instance directly through constructor.
private Patient() {
}
public static Patient getInstance() {
  if (patientInstance == null) {
    patientInstance = new Patient();
  }
  return patientInstance;
}
public void setPatientName( String patientName ){
  this.patient_name = patientName;
}
public String getPatientName( ){
  return this.patient_name;
}
}

然后使用如下所示的类

Patient p = Patient.getInstance();
String patName = p.getPatientName();
TextView tv2 = (TextView) findViewById(R.id.your_text_view_id);
tv2.setText(patName); 

让我们尝试这个解决方案:

公共类 患者扩展应用程序 {

//private variables
public String patient_name = "StartPatientName"; 

 //default constructor    you should not ovveride Application class constructor!
 //    public Patient(){
 //    }
//  public Patient(String startPatientName) {
//    this.patient_name = startPatientName;
//}

public void setPatientName( String patientName ){
    Log.d(TAG, "setting patient name");
    this.patient_name = patientName;
}

public String getPatientName( ){
    Log.d(TAG, "getting patient name");
    return this.patient_name;
}

同样在第二个活动中初始化 tv2,如下所示:

Patient p = (Patient)getApplication();
String patName = p.getPatientName();
TextView tv2 = (TextView) findViewById(R.id.your_text_view_id);
tv2.setText(patName); 

相关内容

  • 没有找到相关文章

最新更新