在另一个java类中使用getter函数时获取null值

时间:2015-09-23 12:44:12

标签: android getter-setter

我有一个MainActivity,我从服务器获取数据,我想使用setter和getter设置数据。我正在使用setter函数来设置Mainactivity中的值。如果我使用MainActivity,则可以正确访问数据。我有另一个java类AlarmReceiver。我想访问MainActiviy中设置的值。但是我在另一堂课中没有得到任何价值。

这是我的MainActivity

 JSONArray arr = new JSONArray(strServerResponse);
 JSONObject jsonObj = arr.getJSONObject(0);
 String DataStatus = jsonObj.getString("status");

 System.out.println(DataStatus);
 if (DataStatus.equalsIgnoreCase("true")) {
        JSONArray arr1 = new JSONArray(strServerResponse);
        JSONObject jsonObj1 = arr.getJSONObject(0);

        pojo = new Pojo();
        empid = jsonObj1.optString("empid");
        pojo.setId(empid);

这是AlarmReceiver

    @Override
public void onReceive(Context context, Intent intent) {
    gps = new GPSTracker(context);


    Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();

    File root = Environment.getExternalStorageDirectory();
    gpxfile = new File(root, "mydata.csv");

    startService();
}

private void startService() {

    Calendar c = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
    strDate = sdf.format(c.getTime());


    pojo=new Pojo();
    String id=pojo.getId();

这些是setter getter

  public class Pojo {
public static String empid11;
public void setId(String empid) {
    this.empid11 = empid;
    Log.e("empidd setter",""+empid);
}

public String getId() {
    Log.e("empidd getter",""+empid11);

    return empid11;
}
}

但我在AlarmReceiver中获得null值。何以获得这个价值?

5 个答案:

答案 0 :(得分:0)

你的pojo是一个新的Pojo。您需要传递保存Id的同一对象。

答案 1 :(得分:0)

id == R.id.action_settings

将值设置为pojo

Pojo pojo =new Pojo(); //global declaration 

并在您的 empid = jsonObj1.optString("empid"); pojo.setId(empid); 方法中删除新的Pojo实例,即删除startService()

new Pojo();

答案 2 :(得分:0)

你可以像这样创建你的getter setter:

public void setMethod (String string)
{
     this.string= string;
}

// getting the ArrayList value 
public static String getMethod() 
{
     return string;
}

您可以使用yourclassname.getMethod()来使用getmethod名称。

答案 3 :(得分:0)

我不确定AlarmReceiver是如何以及何时执行的。因此,对于解决方案,您可以将MainActivity中的pojo实例设为公共静态,即

public static Pojo pojo = null;

正如您当前所做的那样初始化此实例: -

pojo = new Pojo();
empid = jsonObj1.optString("empid");
pojo.setId(empid);

在AlarmReceiver startService()方法中,您可以将其用作

if (MainActivity.pojo != null){
    String id=pojo.getId();
}

在AlarmReceiver类中删除POJO类的所有本地实例/变量。

虽然这种方法不可取。

答案 4 :(得分:0)

为了找到合适的解决方案,我建议你仔细研究Java中对象,实例和类之间的差异。

一些推荐的链接是:

Source1

Source2

此外,您还可以查看静态类单例