我正试图通过单击"保存"按钮来备份我的应用程序上的数据-每次我启动应用程序并在输入一些文本后单击此按钮,它都会在解析数据库上创建一个新的对象ID字段(如果我不关闭应用程序,它会更新相同的ID)。
这使我无法在重新启动应用程序时检索上次保存的数据。
我希望在重新启动应用程序后,每次都能更新同一对象ID上的数据。这可能吗?还是只有当我使用解析用户功能时才有可能?
此外,我希望在启动应用程序时自动检索数据,而不是只在刷新时检索当前数据。
请帮忙!
以下是我为主java文件编写的相关代码,其中"seteditTxt"是将数据写入并检索到的editText项的id:
public class MyActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
String eventTxt;
EditText seteditTxt;
ParseObject Events = new ParseObject("Events");
@
Override
protected void onCreate(Bundle savedInstanceState) {...
}
@
Override
public boolean onOptionsItemSelected(MenuItem item) {
seteditTxt = (EditText) findViewById(R.id.seteditTxt);
int id = item.getItemId();
if (id == R.id.action_refresh) {
updatelocalData();
updateData();
}
if (id == R.id.action_example) {
eventTxt = seteditTxt.getText().toString();
Events.put("EventName", eventTxt);
Events.saveEventually(new SaveCallback() {
public void done(ParseException e) {
if (e == null) {
// Saved successfully.
Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
} else {
// The save failed.
Toast.makeText(getApplicationContext(), "Failed to Save", Toast.LENGTH_SHORT).show();
}
}
});
Events.pinInBackground();
}
return super.onOptionsItemSelected(item);
}
public void updateData() {
ParseQuery < ParseObject > query = ParseQuery.getQuery("Events");
query.getInBackground("d51GM3syxp", new GetCallback < ParseObject > () {
public void done(ParseObject Events, ParseException e) {
if (e == null) {
// gameScore will be your game score
String Txt = Events.getString("EventName");
seteditTxt.setText(Txt);
} else {
// something went wrong
System.out.print("Error in parse retrieving");
}
}
});
}
public void updatelocalData() {
ParseQuery < ParseObject > query = ParseQuery.getQuery("Events");
query.fromLocalDatastore();
query.getInBackground("d51GM3syxp", new GetCallback < ParseObject > () {
public void done(ParseObject Events, ParseException e) {
if (e == null) {
// object will be your game score
String Txt = Events.getString("EventName");
seteditTxt.setText(Txt);
} else {
// something went wrong
System.out.print("Error in locally retrieving");
}
}
});
}
}
解析java文件:
public class ParseActivity extends Application{
@Override
public void onCreate() {
super.onCreate();
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
Parse.initialize(this, "YZG663Azd0yq10GZFLsB8dt5IMtIfKyNEPFf1Ftf", "bEKK3biC93WFWNLInijqJwnWHJCM8Kl7guPViwqQ");
}
}
我搜索了很多网站和教程,但我似乎不明白该遵循什么方法。
提前感谢!!!
每次输入新文本并将其保存在"EventName"列中时,都会生成一个新的ID。这是因为您在"EventName"列下插入了一个全新的数据条目,每个新的数据条目都有自己的唯一ID。
我建议使用不同的方式来存储和检索数据。也许可以考虑为每个事件名称存储一个唯一的用户ID,并且只由该特定用户获取这些事件。例如:
Events.put("EventName", eventTxt);
Events.put("EventUser", uniqueUserName); //add a unique user name with each event
Events.saveEventually(new SaveCallback() {
和检索:
ParseQuery < ParseObject > query = ParseQuery.getQuery("Events");
query.whereEqualTo("EventUser", uniqueUserName);
query.findInBackground....
对于第二个问题:要在应用程序启动时自动获取数据,只需在活动的onResume()
函数中调用updateLocalData()
和updateData()
方法即可。很简单。