匿名の内部クラスメソッドを使用して、外部クラスの 'ArrayList'を作成するにはどうすればよいですか?私のコードは次のとおりです:匿名クラス内の外部クラスプロパティを変更する
public class Bookshelf {
private static final String TAG = "Bookshelf";
private final ArrayList<Book> books = new ArrayList<Book>();
public Bookshelf() {
try {
setContent();
} catch(JSONException e) {
Log.i(TAG, e.getMessage());
}
Log.i(TAG, Integer.toString(books.size())); //outputs "0" (incorrect)
}
private void setContent() throws JSONException {
RestClient.get("/books/", null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
super.onSuccess(statusCode, headers, response);
for(int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Book book = new Book();
book.setId(obj.getInt("_id"));
book.setTitle(obj.getString("name"));
books.add(book);
} catch (JSONException e) {
System.exit(1);
}
}
Log.i(TAG, Integer.toString(books.size())); //outputs 60 (correct)
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString, throwable);
System.exit(1);
}
});
}
}
APIコールは完全に動作しており、 'ArrayList'は内部クラス内に正しく設定されています。しかし、内部クラスの外にある 'ArrayList'を使って何かをしようとすると、空に戻っていることがわかります。誰かが私を正しい方向に向けることができますか?前もって感謝します!
JsonHttpResponseHandlerはGuavaの将来のようです。何らかの未来がある場合は、将来の完了と外部クラスの内容のチェックの間に競争があるため、おそらくブロックする必要があります。 –
もしそれがandroid-async-http JsonHttpResponseHandlerならば、あなたは未来のものにマップするか、コールバックで設定した 'setContent'の' CountDownLatch'を持っていて、 'setContent'の前に' await'戻る。 –
try: 'books.add(新しいブック());' 'books.get(i).setId(obj.getInt(" _ id "));' 'books.get(i).setTitle(obj .getString( "name")); ' –