4

「classA」という名前の解析クラスがあります。特定の「objectId」を持つ「classA」の行を検索するクエリを作成したいと考えています。次のコードを書きました。ただし、ParseObjects の空のリストが常に返されます。「classA」に存在する別の列を試しました。常に空のリストが返されます。助けてください。

同じアプリケーション内の別のクラス「classB」でこのクエリを使用したことがありますが、それは完全に機能します。「query.find」を使用した「try-catch」ブロックの実装も試しました。それも空のリストを返します。前もって感謝します。何が悪いのか説明してください。

さらにコード スニペットが必要な場合は、お知らせください。

    Button btn = (Button) findViewById(R.id.query_btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText objIdET= (EditText) findViewById(R.id.obj_id);
            String objId= objIdET.getText().toString();
            Log.d("check", objId); // Prints correct value here..

            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("classA");
            fridgeID.whereEqualTo("objectId", objId);
            List<ParseObject> lp = new ArrayList<ParseObject>();
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    Log.d("#results", String.valueOf(objects.size()));
                }
            });

            }
        }
    });
4

5 に答える 5

0

アプリケーションで解析を初期化するときに、正しいキーを設定したかどうかを確認してください。

于 2015-12-11T11:34:41.597 に答える
0

ユーザー (ログインしているユーザー) に対応する行がないため、Parse オブジェクトの空のリストを取得しています。

Parse.com は、ACL と呼ばれるフィールドを使用してデータのプライバシーを実装します。したがって、ユーザー A がテーブルにエントリを追加すると、デフォルトで、ACL はユーザー A に対して読み取り + 書き込みに設定され、他のユーザーに対してはなしに設定されます。したがって、ユーザー B はユーザー A のオブジェクトを見つけることができません。

詳細を読むには: https://parse.com/docs/android/guide#security

特定のグループに属するユーザーだけが互いのオブジェクトを読み書きできるメカニズムを作成する場合は、ロール (Parse 機能) を使用できます。

https://parse.com/docs/android/guide#roles

于 2015-09-29T17:15:37.740 に答える
0

getInBackground()その行の objectId がある場合に使用します。

ParseQuery<ParseObject> query = ParseQuery.getQuery("classA");
query.getInBackground(objId, new GetCallback<ParseObject>() {
 public void done(ParseObject object, ParseException e) {
     if (e == null) {
         Log.d("#results", String.valueOf(objects.size()));
     } else {
         // Handle the error
     }
 }
}

findInBackground()objectId がなく、何らかの条件を設定している場合に呼び出します。このように objectId フィールドに条件を設定することもできます。

ParseQuery<ParseObject> query = ParseQuery.getQuery("classA");
query.whereEqualTo("objectId", objId);
query.findInBackground(new FindCallback<ParseObject>() {
 public void done(List<ParseObject> objects, ParseException e) {
     if (e == null) {
         Log.d("#results", String.valueOf(objects.size()));
     } else {
         // Handle the error
     }
 }
}
于 2015-09-24T18:43:59.037 に答える