2013-02-28 5 views
0

я использую услуги parse.com, андроид руководство:синтаксический андроид загрузить и скачать

https://www.parse.com/docs/android_guide

и не работал для меня (я получаю сообщение: приложение должно быть закрыто ...)

вот мой код:

gameScore = new ParseObject("GameScore"); 
gameScore.put("score", 1337); 
gameScore.put("playerName", "Sean Plott"); 
gameScore.put("cheatMode", false); 
try { 
    gameScore.save(); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
gameScore.saveInBackground(new SaveCallback() { 
     public void done(ParseException e) { 
     // Access the object id here 
      objectId= gameScore.getObjectId(); 
     } 
    }); 

ParseQuery query = new ParseQuery("GameScore"); 

query.getInBackground(objectId, new GetCallback() { 

@Override 
public void done(ParseObject parseObject, ParseException arg1) { 
    // TODO Auto-generated method stub 
    int score= parseObject.getInt("score"); 
    Integer i =new Integer(score); 
    t1.setText(i.toString()); 
} 
}); 

и вот Logcat:

02-28 09:59:10.552: E/AndroidRuntime(773): FATAL EXCEPTION: main 
02-28 09:59:10.552: E/AndroidRuntime(773): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.salebook/com.example.salebook.MainActivity}: java.lang.NullPointerException 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.os.Looper.loop(Looper.java:137) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-28 09:59:10.552: E/AndroidRuntime(773): at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 09:59:10.552: E/AndroidRuntime(773): at java.lang.reflect.Method.invoke(Method.java:511) 
02-28 09:59:10.552: E/AndroidRuntime(773): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-28 09:59:10.552: E/AndroidRuntime(773): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-28 09:59:10.552: E/AndroidRuntime(773): at dalvik.system.NativeStart.main(Native Method) 
02-28 09:59:10.552: E/AndroidRuntime(773): Caused by: java.lang.NullPointerException 
02-28 09:59:10.552: E/AndroidRuntime(773): at com.example.salebook.MainActivity.onCreate(MainActivity.java:69) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.Activity.performCreate(Activity.java:5104) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-28 09:59:10.552: E/AndroidRuntime(773): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-28 09:59:10.552: E/AndroidRuntime(773): ... 11 more 

Кроме того, когда я нахожусь в режиме отладки, я вижу, что objectId имеет значение NULL, хотя я вижу на сервере, что объект, который был успешно взломан с проблемой, имеет действительный объект.

Кроме того, когда я смотрю в объект gameScore в затмении я могу видеть, что он имеет тот же ObjectId как на сервере, однако снова вернуть меня нуль в ObjectId

благодаря

ответ

0

Так что же такое происходит то, что вы выполняете saveInBackground, который начинается с нового потока. Затем вы сразу вызываете query.getInBackground с нулевым объектом. Вам нужно подождать и вызвать query.getInBackground ПОСЛЕ завершенного вызова в gameScore.saveInBackground.

Я бы рекомендовал перевести второй вызов на завершенный вызов функции в gamerScore.saveInBackground выше. Кроме того, необходимо учитывать, что экономия может потерпеть неудачу, так что вы хотите, чтобы поймать исключение следующим образом:

public void done(List<ParseObject> items, ParseException e) { 
    if (e == null) { 
     //execute query here 
    } else { 
     //handle exception here 
    } 

}

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