解析本地数据存储检索对象值为 null
Parse local data store retrieving object values as null
我正在尝试在解析本地数据存储上保存和检索一些对象数据。我的问题是说我在这种情况下保存了两个对象 LocalPrinterDetail
个对象,数据的保存和检索工作正常并且数据在我的 recyclerview 上正确显示,但是,当我退出应用程序并再次打开它时printerName
和 stationName
对于两个对象中的每一个都是空的,但是 localPrinterDetailObjects
显示它在调试期间的大小为 2,因此在我的 recyclerview 上显示了空白项目。为什么在应用程序退出时会发生这种情况,为什么我不能缓存数据?
检索方法
public void retrieveLocalPrinterDetailRecords() {
ParseQuery<LocalPrinterDetail> query = ParseQuery.getQuery(LocalPrinterDetail.class);
query.fromLocalDatastore();
query.findInBackground(new FindCallback<LocalPrinterDetail>() {
@Override
public void done(List<LocalPrinterDetail> localPrinterDetailObjects, ParseException e) {
if (e == null) {
if (localPrinterDetailObjects != null && !localPrinterDetailObjects.isEmpty() && localPrinterDetailObjects.get(0) != null) {
localPrinterList.clear();
localPrinterList.addAll(localPrinterDetailObjects);
}
setupRecyclerView((RecyclerView) recyclerView);
adapter.notifyDataSetChanged();
} else {
e.printStackTrace();
}
}
});
}
保存方法
public void saveLocalPrinterDetailRecord(String printerStationName) {
LocalPrinterDetail localPrinterDetail = new LocalPrinterDetail();
localPrinterDetail.setStationName(printerStationName);
localPrinterDetail.setPrinterName(printerModelName);
localPrinterDetail.put("station_name", localPrinterDetail.getStationName());
localPrinterDetail.put("printer_name", localPrinterDetail.getPrinterName());
localPrinterDetail.pinInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(context, "Local Printer Saved", Toast.LENGTH_LONG).show();
} else {
e.printStackTrace();
}
}
});
localPrinterDetail.saveEventually();
}
LocalPrinterDetail class
@ParseClassName("LocalPrinterDetail")
public class LocalPrinterDetail extends ParseObject {
private int printerId;
private String printerName;
private String stationName;
public LocalPrinterDetail() {
}
public int getPrinterId() {
return printerId;
}
public void setPrinterId(int printerId) {
this.printerId = printerId;
}
public String getPrinterName() {
return printerName;
}
public void setPrinterName(String printerName) {
this.printerName = printerName;
}
public String getStationName() {
return stationName;
}
public void setStationName(String stationName) {
this.stationName = stationName;
}
}
尝试将您的子类声明更改为:
@ParseClassName("LocalPrinterDetail")
public class LocalPrinterDetail extends ParseObject {
public int getPrinterId() {
return getInt("printerId");
}
public void setPrinterId(int printerId) {
put("printerId", printerId);
}
public String getPrinterName() {
return getString("printerName");
}
public void setPrinterName(String printerName) {
put("printerName", printerName);
}
public String getStationName() {
return getString("stationName");
}
public void setStationName(String stationName) {
put("stationName", stationName);
}
}
我正在尝试在解析本地数据存储上保存和检索一些对象数据。我的问题是说我在这种情况下保存了两个对象 LocalPrinterDetail
个对象,数据的保存和检索工作正常并且数据在我的 recyclerview 上正确显示,但是,当我退出应用程序并再次打开它时printerName
和 stationName
对于两个对象中的每一个都是空的,但是 localPrinterDetailObjects
显示它在调试期间的大小为 2,因此在我的 recyclerview 上显示了空白项目。为什么在应用程序退出时会发生这种情况,为什么我不能缓存数据?
检索方法
public void retrieveLocalPrinterDetailRecords() {
ParseQuery<LocalPrinterDetail> query = ParseQuery.getQuery(LocalPrinterDetail.class);
query.fromLocalDatastore();
query.findInBackground(new FindCallback<LocalPrinterDetail>() {
@Override
public void done(List<LocalPrinterDetail> localPrinterDetailObjects, ParseException e) {
if (e == null) {
if (localPrinterDetailObjects != null && !localPrinterDetailObjects.isEmpty() && localPrinterDetailObjects.get(0) != null) {
localPrinterList.clear();
localPrinterList.addAll(localPrinterDetailObjects);
}
setupRecyclerView((RecyclerView) recyclerView);
adapter.notifyDataSetChanged();
} else {
e.printStackTrace();
}
}
});
}
保存方法
public void saveLocalPrinterDetailRecord(String printerStationName) {
LocalPrinterDetail localPrinterDetail = new LocalPrinterDetail();
localPrinterDetail.setStationName(printerStationName);
localPrinterDetail.setPrinterName(printerModelName);
localPrinterDetail.put("station_name", localPrinterDetail.getStationName());
localPrinterDetail.put("printer_name", localPrinterDetail.getPrinterName());
localPrinterDetail.pinInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(context, "Local Printer Saved", Toast.LENGTH_LONG).show();
} else {
e.printStackTrace();
}
}
});
localPrinterDetail.saveEventually();
}
LocalPrinterDetail class
@ParseClassName("LocalPrinterDetail")
public class LocalPrinterDetail extends ParseObject {
private int printerId;
private String printerName;
private String stationName;
public LocalPrinterDetail() {
}
public int getPrinterId() {
return printerId;
}
public void setPrinterId(int printerId) {
this.printerId = printerId;
}
public String getPrinterName() {
return printerName;
}
public void setPrinterName(String printerName) {
this.printerName = printerName;
}
public String getStationName() {
return stationName;
}
public void setStationName(String stationName) {
this.stationName = stationName;
}
}
尝试将您的子类声明更改为:
@ParseClassName("LocalPrinterDetail")
public class LocalPrinterDetail extends ParseObject {
public int getPrinterId() {
return getInt("printerId");
}
public void setPrinterId(int printerId) {
put("printerId", printerId);
}
public String getPrinterName() {
return getString("printerName");
}
public void setPrinterName(String printerName) {
put("printerName", printerName);
}
public String getStationName() {
return getString("stationName");
}
public void setStationName(String stationName) {
put("stationName", stationName);
}
}