0

私はparse.com、androidガイドのサービスを使用しています:

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であることがわかりますが、サーバーでは、オブジェクトが問題を抱えて正常にアップロードされ、有効なobjectIdを持っていることがわかります。

また、EclipseでgameScoreオブジェクトを見ると、サーバーと同じobjectIdを持っていることがわかりますが、objectIdではnullが返されます。

ありがとう

4

1 に答える 1

0

つまり、新しいスレッドで開始する saveInBackground を実行しています。その後すぐに、null objectId を指定して query.getInBackground を呼び出します。gameScore.saveInBackground で呼び出しを行った後、待機して query.getInBackground を呼び出す必要があります。

上記の gamerScore.saveInBackground 実行で、2 番目の呼び出しを done 関数呼び出しに移動することをお勧めします。また、保存が失敗する可能性があることを考慮する必要があるため、次のように例外をキャッチする必要があります。

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

}

于 2013-02-28T10:43:17.397 に答える