2015-04-16 2 views
0

Я пытаюсь создать резервную копию данных в своем приложении, нажав кнопку «Сохранить» - каждый раз, когда я запускаю приложение и нажимаю эту кнопку после ввода некоторого текста, он создает новое поле идентификатора объекта в базе данных синтаксического анализа (он обновляет тот же идентификатор, если я не закрываю приложение).Как предотвратить создание нового идентификатора объекта каждый раз, когда я перезапускаю приложение в Parse?

Это предотвращает получение тех же данных, которые были сохранены при перезагрузке приложения.

Я хочу иметь возможность обновлять данные каждый раз на одном ID объекта после перезапуска приложения. Это возможно? Или это будет возможно только в том случае, если я использую функцию Parse User?

Кроме того, я хочу, чтобы данные извлекались автоматически при запуске приложения - вместо текущего, когда он извлекается только при обновлении.

Пожалуйста, помогите!

Вот мои соответствующие фрагменты кода для основного файла Java, где «seteditTxt» является идентификатор элемента EditText, где записаны данные и извлеченного на:

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"); 
    } 
} 

Я искал множество веб-сайтов и учебных пособий, но я, похоже, не понимаю, как должен следовать этот метод.

Заранее благодарен!

ответ

0

Каждый раз, когда вы помещаете новый текст и сохраняете его в столбце «EventName», будет создан новый идентификатор. Это связано с тем, что вы вставляете полностью новую запись данных в столбце «EventName», и каждая новая запись данных имеет свой собственный уникальный идентификатор.
Я бы предложил другой способ хранения и извлечения данных. Возможно, рассмотрите возможность хранения уникального идентификатора пользователя с каждым именем события и только извлечение этих событий этим конкретным пользователем. Например:

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.... 

Для вашего второго вопроса: Для автоматического получения данных при запуске приложения, просто вызовите вашу updateLocalData() и updateData() методы в onResume() функции вашей деятельности. Очень просто.

+0

Мой поиск был в моем фрагменте, поэтому я добавил его в onCreateview фрагмента, и он работал для получения данных автоматически. Для получения определенного события с использованием идентификатора пользователя - отличная идея. С этим мне не нужно было бы использовать функциональность пользователя синтаксического анализа, правильно? Спасибо, тонна попробует это сейчас. –

+0

Да, вам не нужно использовать пользовательскую функциональность, однако для вас это упростит, если вы решите его использовать. – Urban

Смежные вопросы