0

そのため、今のところParseを使用してアプリのバックエンドを実行しています。Parseデータベースにクエリを実行すると、データは一見奇妙な方法で返されます(私にとっては、これは初めてです)-

            query.getFirstInBackground(new GetCallback() {
            public void done(ParseObject object, ParseException e) {
              if (object == null) {
              } else {
              }
            }
          });

また、クエリのデータは、たとえばElseステートメント内で利用できます。Date time = object.getCreatedAt();を実行できます。取得したオブジェクトが作成された時刻を取得します。

しかし、そのデータを使用してアプリ内のtextViewのテキストを更新したいので、問題が発生します。データがcallBack内に「スタック」しているように感じます(これはおそらく正しくないことに気づきます。これを実行しようとすると、エラーが発生します:「定義された内部クラス内の非最終変数updateTextを参照できません別の方法で」。エラーはupdateText、timeText、table、およびiにあります。失敗している関連するコードスニペットは次のとおりです-

TableLayout table = (TableLayout) findViewById(R.id.tableLayout);
    TextView courtText;
    TextView updateText;
    TextView timeText;
    // For each row
    for (int i = 0; i < table.getChildCount(); i++) {
        // Get the one `courtText` in this row
        courtText = (TextView) table.getChildAt(i).findViewById(R.id.courtText);

        ParseQuery query = new ParseQuery("Updates");
        query.whereEqualTo("court",courtText);
        query.orderByAscending("createdAt");
        query.getFirstInBackground(new GetCallback() {
            public void done(ParseObject object, ParseException e) {
              if (object == null) {
                Log.d("update", "The getFirst request failed.");
              } else {
                Log.d("update", "Retrieved the object.");

                String update = object.getString("update");
                Date time = object.getCreatedAt();

                updateText = (TextView) table.getChildAt(i).findViewById(R.id.updateText);
                timeText = (TextView) table.getChildAt(i).findViewById(R.id.timeText);

                updateText.setText(update);
                java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
                timeText.setText(dateFormat.format(time));
              }
            }
          });

    }

どんな助けでもいただければ幸いです。

4

2 に答える 2

0

これを解決するには2つの方法があります。ダーシャンが言ったように、1つはテーブルをファイナルにすることです。これにより、GetCallbackオブジェクト(内部クラス)内からエラーなしでアクセスできるようになります。2番目の方法は、親オブジェクトを参照することです。たとえば、このコードが、というActivityサブクラスDisplayTableActivityにある場合は、メソッドをその中に入れてUpdateTable(String updateText, String timeText)、GetCallbackオブジェクトのテーブルに直接アクセスする代わりに、次の行を作成します。 :

DisplayTableActivity.this.UpdateTable(updateText, timeText);

そうすれば、その関数(アクティビティに属する)内のテーブルのビューを問題なく取得できます。

于 2012-06-16T04:52:34.700 に答える
0

現在テストすることはできませんが、次のように動作するはずです。

final TableLayout table = (TableLayout) findViewById(R.id.tableLayout);
TextView courtText;

for (int i = 0; i < table.getChildCount(); i++) {
    courtText = (TextView) table.getChildAt(i).findViewById(R.id.courtText);
    final TextView updateText = (TextView) table.getChildAt(i).findViewById(R.id.updateText);
    final TextView timeText = (TextView) table.getChildAt(i).findViewById(R.id.timeText);

    ParseQuery query = new ParseQuery("Updates");
    query.whereEqualTo("court",courtText);
    query.orderByAscending("createdAt");
    query.getFirstInBackground(new GetCallback() {
        public void done(ParseObject object, ParseException e) {
            if (object == null) {
                Log.d("update", "The getFirst request failed.");
            } else {
                Log.d("update", "Retrieved the object.");

                String update = object.getString("update");
                Date time = object.getCreatedAt();

                updateText.setText(update);
                java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
                timeText.setText(dateFormat.format(time));
            }
        }
    });
}

このようにして、内部クラスの内部からアクセスする必要がある内部クラスの外部からの2つの変数(updateTextおよびtimeText)のみが宣言さfinalれるため、すべてが機能するはずです。

于 2012-06-16T04:40:59.510 に答える