【发布时间】:2016-11-10 12:20:42
【问题描述】:
如何使用匿名内部类方法填充外部类的“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 看起来像番石榴的未来。如果它是某种未来,你可能需要阻止它,因为在未来完成和你检查外部类的内容之间会有一场比赛。
-
如果它是 android-async-http JsonHttpResponseHandler,您需要将其映射到某种未来的风格,或者在您在回调中设置的
setContent中有一个CountDownLatch,然后@ 987654324@ 在setContent返回之前打开。 -
试试:
books.add(new Book());books.get(i).setId(obj.getInt("_id"));books.get(i).setTitle(obj.getString("name")); -
@FallaCoulibaly 谢谢,但还是不行。
-
您是否尝试将应该存储
books的部分以JSONObject作为参数并在您的匿名类中调用它?
标签: java api rest oop arraylist