Android 如何解决将parsefile数组转换为字节数组时的越界错误?
所以我要尽可能清楚地把它分解 1) 因此,我从Parse查询了ParseFile图像数组,并希望将它们转换为位图数组。下面是代码Android 如何解决将parsefile数组转换为字节数组时的越界错误?,android,parse-platform,indexoutofboundsexception,Android,Parse Platform,Indexoutofboundsexception,所以我要尽可能清楚地把它分解 1) 因此,我从Parse查询了ParseFile图像数组,并希望将它们转换为位图数组。下面是代码 public void queryImage() { ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); //So lets queryImage all the images that belong to the user. query.setLi
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();
}
}
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位于名称数组中的位置0,我应该将字节数组中John的位置0处的图像添加到我称为“CardModel”的类中“这是密码。请注意,这三种方法都在一个类中
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);
}
}
queryCardNames
的大小与BitmapArray
不同,这就是为什么会出现索引自动边界异常的原因
在queryDoneSetCards()
方法中,更改
for(int i = 0; i < queryCardNames.size(); i++)
for(int i=0;i
到
for(int i=0;i
在使用parse时,我发现将一些调用放入异步任务中非常有用。特别是某些数据依赖于正在获取的其他数据的部分。只获取异步任务中的所有数据,然后使用它,而不是尝试链接异步解析调用,这是非常有用的
private class MyAsync extends AsyncTask<> {
protected void doInBackground() {
queryImage()
}
protected void onPostExecute(Long result) {
queryDoneSetCards();
}
}
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();
}
}
私有类MyAsync扩展了AsyncTask{
受保护的void doInBackground(){
查询图像()
}
受保护的void onPostExecute(长结果){
queryDoneSetCards();
}
}
公共无效查询图像(){
ParseQuery=ParseQuery.getQuery(“TestObject”);
//因此,让我们查询属于用户的所有图像。
查询设置限制(2);
查询。何处存在(“图像文件”);
query.orderByDescending(“createdAt”);
试一试{
List lists2=query.find();
对于(ParseObject cardImage:lists2){
ParseImageFileArrayList.add((ParseFile)cardImage.get(“ImageFile”));
}
convertFileArray(ParseImageFileArrayList);//这是我创建的另一个
}捕获(解析异常){
e、 printStackTrace();
}
}
转换文件数组将是同步的
private void convertFileArray(ArrayList<ParseFile> arrayList) {
for(ParseFile file: arrayList) {
if(file != null) {
byte[] bytes = file.getData();
bmp1 = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
BitmapArray.add(bmp1);
}
}
}
private void convertFileArray(ArrayList ArrayList){
for(ParseFile文件:arrayList){
如果(文件!=null){
byte[]bytes=file.getData();
bmp1=BitmapFactory.decodeByteArray(字节,0,字节.长度);
添加(bmp1);
}
}
}
然后在异步任务的
onPostExecute()
中调用queryDoneSetCards
。在执行queryDoneSetCards()
loop之前,您可能还应该进行检查,以确保位图数组和名称数组的大小相同。请添加包含越界错误的完整堆栈跟踪。您的错误在queryDoneSetCards()
方法的for循环中。尝试设置一些断点或在那里放置一些日志语句,以确保queryCardNames集合包含数据和日志exists@doubleAquerycardNames很好。它在cardModel.setImageAsBitmap(BitmapArray.get(i))上给了我一个错误;显示我的位图数组为空…可能是因为我在后台线程中执行此操作。convertFileArray()方法中是否有file.getDataInBackground的替代方法?我试过了,BitmapArray也给了我一个indexOutOfBounds exeception。它是说大小为0..如果BitmapArray大小为0,它将不会进入循环,如何获取IndexOutOfBoundsException??当我为for循环使用queryCardNames数组并使用cardModel.setImageAsBitmap(BitmapArray.get(i));在for循环中,我得到了indexoutofBounds异常。但是如果我按照你发布的那样做,我仍然会得到索引越界异常。原因:java.lang.IndexOutOfBoundsException:索引0无效,大小为0如果您在后台获取数据并将数据添加到回调中的数组中,则根据您调用查询卡名称的位置,那里还没有任何数据。
private class MyAsync extends AsyncTask<> {
protected void doInBackground() {
queryImage()
}
protected void onPostExecute(Long result) {
queryDoneSetCards();
}
}
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();
}
}
private void convertFileArray(ArrayList<ParseFile> arrayList) {
for(ParseFile file: arrayList) {
if(file != null) {
byte[] bytes = file.getData();
bmp1 = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
BitmapArray.add(bmp1);
}
}
}