3

サンプルの解析サーバー ( https://github.com/ParsePlatform/parse-server-example ) をデスクトップにインストールし、それをテストするための簡単なアプリを作成しました。

私のアプリはオブジェクトをサーバーに保存し、オブジェクトを取得して、mTextView の値をオブジェクトの値に設定します。

問題は、このコードをサーバーからデータを取得しようとすると、機能することです:

    query.getInBackground("5K7N8a8Dmd", new GetCallback<ParseObject>() ...

(curlでオブジェクトIDを取得)

しかし、これを試してみると(curlを使用せずにオブジェクトIDを取得するため):

            gameScore.saveInBackground(new SaveCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    objectId = gameScore.getObjectId();
                } else {
                    Log.e("saveInBackground", getErrorMessage(e));
                }
            }
        });

...

    query.getInBackground(objectId, new GetCallback<ParseObject>() ...

うまくいきません。

ログキャット:

E/getInBackground﹕ no results found for query - code: 101

MainActivity.java

    public class MainActivity extends Activity {

    public TextView mTextView;
    public String objectId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.text_view);

        Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
                        .applicationId(Constants.APP_ID)
                        .server(Constants.SERVER_URL)
                        .build()
        );

        final ParseObject gameScore = new ParseObject("Foo1234");
        gameScore.put("score", 5000);
        gameScore.saveInBackground(new SaveCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    objectId = gameScore.getObjectId();
                } else {
                    Log.e("saveInBackground", getErrorMessage(e));
                }
            }
        });

        ParseQuery<ParseObject> query = ParseQuery.getQuery("Foo1234");
        query.getInBackground(objectId, new GetCallback<ParseObject>() {
            public void done(ParseObject object, ParseException e) {
                if (e == null) {
                    mTextView.setText(Integer.toString(gameScore.getInt("score")));
                } else {
                    Log.e("getInBackground", getErrorMessage(e));
                }
            }
        });
    }

    public String getErrorMessage(ParseException e) {
        return e.getMessage() + " - code: " + e.getCode();
    }
}

定数.java

    public class Constants {
    public static String SERVER_URL = "http://192.168.1.14:1337/parse/";
    public static String APP_ID = "myAppId";
}

前もって感謝します。

4

2 に答える 2

1

これを試して

ParseQuery<ParseObject> query = ParseQuery.getQuery("_Foo1234");
query.whereEqualTo("objectId","wfBB0gpCkP");
query.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> objects, ParseException e) {
        if (e == null) {
            // row of Object Id "wfBB0gpCkP"
        } else {
            // error
        }
    }
});

また変更

ParseQuery<ParseObject> query = ParseQuery.getQuery("Foo1234");

ParseQuery<ParseObject> query = ParseQuery.getQuery("_Foo1234"); 

これが機能するかどうかを確認してください。

于 2016-02-05T21:02:28.880 に答える
0

問題は の「背景」の部分ですsaveInBackground()。保存の次の行で保存が完了していません。実際、それは保存を開始していません。完了ハンドラーが実行されるまで、保存は完了しません。

検討...

        // code here runs **first**
        gameScore.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            // code here runs **third, much later than second**
            if (e == null) {
                objectId = gameScore.getObjectId();
            } else {
                Log.e("saveInBackground", getErrorMessage(e));
            }
        }
        // code here runs **second, immediately**

保存の完了ハンドラー内で「get」クエリを実行すると、それが機能することがわかります。(もちろん、save を呼び出したばかりのオブジェクトへのハンドルを持っているので、オブジェクトを取得する理由はあまりありません)。

于 2016-02-05T22:20:27.153 に答える