【问题标题】:How do I prevent creating a new object ID each time I restart the app, on Parse?每次在 Parse 上重新启动应用程序时,如何防止创建新的对象 ID?
【发布时间】:2015-04-16 01:15:44
【问题描述】:

我正在尝试通过单击“保存”按钮来备份我的应用程序上的数据 - 每次我启动应用程序并在输入一些文本后单击此按钮时,它都会在解析数据库上创建一个新的对象 ID 字段(它会在如果我不关闭应用程序,则使用相同的 ID)。

这会阻止我在重新启动应用程序时检索上次保存的相同数据。

我希望在我重新启动应用程序后每次都能够更新同一个对象 ID 上的数据。这可能吗?还是只有在我使用 Parse User 功能时才有可能?

另外,我希望在启动应用程序时自动检索数据 - 而不是仅在刷新时检索的当前数据。

请帮忙!

这是我的主要 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");
    }
}

我搜索了很多网站和教程,但我似乎无法理解要遵循的方法。

提前致谢!!!

【问题讨论】:

    标签: java android parse-platform database-backups objectid


    【解决方案1】:

    每次您输入新文本并将其保存到“事件名称”列时,都会生成一个新 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() 方法即可。很简单。

    【讨论】:

    • 我的检索在我的片段中,所以我将它添加到片段的 onCreateview 中,它可以自动获取数据。使用用户 ID 获取特定事件是一个好主意,谢谢。有了这个我就不需要使用解析用户功能了,对吧?谢谢一吨现在就试试。
    • 是的,您不需要使用用户功能,但是,如果您决定使用它,它会让您更轻松。
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2011-03-22
    • 2010-10-11
    • 2014-03-09
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多