【发布时间】:2015-12-08 21:48:15
【问题描述】:
所以我将尽可能清楚地分解它。
1) 所以我从 Parse 查询了一个 ParseFile 图像数组,我想将它们转换成一个位图数组。所以这里是它的代码。
public void queryImage() {
ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject");
//So lets queryImage all the images that belong to the user.
query.setLimit(2);
query.whereExists("ImageFile");
query.orderByDescending("createdAt");
try {
List<ParseObject> lists2 = query.find();
for(ParseObject cardImage : lists2) {
ParseImageFileArrayList.add((ParseFile) cardImage.get("ImageFile"));
}
convertFileArray(ParseImageFileArrayList);//Here is another I created
} catch(ParseException e) {
e.printStackTrace();
}
}
2) 现在在那个方法中,我调用了convertFileArray() 方法,该方法接收该解析文件数组并将其转换为位图。这是它的代码。
private void convertFileArray(ArrayList<ParseFile> arrayList) {
for(ParseFile file: arrayList) {
if(file != null) {
file.getDataInBackground(new GetDataCallback() {
@Override
public void done(byte[] bytes, ParseException e) {
if(e == null) {
bmp1 = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
BitmapArray.add(bmp1);
} else {
}
}
});
}
}
}
3) 好的,现在我想遍历一串名称,“John、Mary、Adam、Susan 等。) 对于该位置的每个名称,我想从位图数组中添加相应的图像。所以如果 John 在名称 Array 中的位置 0,我应该将 John 的位置 0 处的图像从我的 Byte 数组添加到我称为“CardModel”的类中 这是代码。请注意,这 3 个方法都在 1 个类中.
public void queryDoneSetCards() {//Here we need to make an Array of Cardmodels.
for(int i = 0; i < queryCardNames.size(); i++) {
CardModel cardModel = new CardModel();
cardModel.setImageAsBitmap(BitmapArray.get(i));//HERE IS WHERE IM GETTING THE ERROR!
CardModelArray.add(cardModel);
}
}
4) 最后,当我进入另一个活动时,用户单击“完成”(首先调用 queryImage 方法,其中包含被调用的 convertFileArray() 方法),然后调用 queryDoneSetCards() 方法。我得到了一个超出范围的索引异常,我无法弄清楚它为什么不起作用。
Process: com.lorentzos.swipecards.example, PID: 23182
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
12-08 13:26:47.218 23182-23182/com.lorentzos.swipecards.example E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lorentzos.swipecards.example, PID: 23182
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.lorentzos.swipecards.MyParse.MyParse.queryDoneSetCards(MyParse.java:285)
at com.lorentzos.swipecards.MyParse.MyParse.convertFileArray(MyParse.java:267)
at com.lorentzos.swipecards.MyParse.MyParse.queryImage(MyParse.java:143)
at com.lorentzos.swipecards.CardFinal.Card_FINALE.onClick(Card_FINALE.java:258)
at android.view.View.performClick(View.java:4803)
at android.view.View$PerformClick.run(View.java:19981)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5430)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
【问题讨论】:
-
请添加完整的堆栈跟踪,其中包含越界错误。
-
您的错误出现在
queryDoneSetCards()方法的 for 循环中。尝试设置一些断点或放置一些日志语句,以确保 queryCardNames 集合有数据并且存在 -
@doubleA querycardNames 很好。它给了我一个关于 cardModel.setImageAsBitmap(BitmapArray.get(i)); 的错误。显示我的 BitmapArray 是空的...也许是因为我在后台线程中执行此操作。 convertFileArray() 方法中是否有 file.getDataInBackground 的替代方法?
标签: android parse-platform indexoutofboundsexception