Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从内部类中获取数据_Java_Arraylist_Parse Platform_Inner Classes_Anonymous Inner Class - Fatal编程技术网

Java 从内部类中获取数据

Java 从内部类中获取数据,java,arraylist,parse-platform,inner-classes,anonymous-inner-class,Java,Arraylist,Parse Platform,Inner Classes,Anonymous Inner Class,我对一个问题感到非常沮丧。如何访问在内部类中获取的数据。我正在为我的新应用程序的后端使用Parse,但是所有的Parse方法都是匿名使用的,并且都是内部类,因此我无法真正访问检索到的任何内容。有办法绕过它吗 我试过了,但没用。每件事都必须是最终的,期末考试不能在班内改变 这是我的密码 imageView_intro = (ImageView)findViewById(R.id.imageView_intro); List<Bitmap> list = new ArrayLi

我对一个问题感到非常沮丧。如何访问在内部类中获取的数据。我正在为我的新应用程序的后端使用Parse,但是所有的Parse方法都是匿名使用的,并且都是内部类,因此我无法真正访问检索到的任何内容。有办法绕过它吗

我试过了,但没用。每件事都必须是最终的,期末考试不能在班内改变

这是我的密码

 imageView_intro = (ImageView)findViewById(R.id.imageView_intro);
    List<Bitmap> list = new ArrayList<Bitmap>();
   BackEndUtils.downloadIntroImage(list);
    imageView_intro.setImageBitmap(list.get(0));
imageView\u intro=(imageView)findViewById(R.id.imageView\u intro);
列表=新的ArrayList();
BackEndUtils.downloadIntroImage(列表);
imageView_intro.setImageBitmap(list.get(0));
publicstaticvoid下载introimage(最终列表){
ParseQuery=新的ParseQuery(“简介”);
查询:whereEqualTo(“名称”、“介绍”);
//BEUFindCallBack BEUFindCallBack=新的BEUFindCallBack(“图像”);
query.findInBackground(新的FindCallback(){
@凌驾
public void done(列出parseObjects,com.parse.parsee){
for(ParseObject临时对象:parseObjects){
ParseFile tempFile=(ParseFile)tempObject.get(“图像”);
getDataInBackground(新的GetDataCallback(){
@凌驾
public void done(字节[]字节,com.parse.parsee){
添加(bytesToBitMap(字节));
}
});
}
}
});
}
公共静态位图bytesToBitMap(字节[]字节){
位图位图=位图工厂
.decodeByteArray(
字节,0,
字节(长度);
返回位图;
}
最后,列表的大小仍然为0。。。这意味着实际上没有添加任何内容。如何访问
字节[]
变量并从内部类中拉出


奇怪的是,如果我发送图像视图并将bitmapimage设置在内部类中,它就会工作。但我希望能够将字节数组从内部匿名类中取出并保存到某个位置,以便以后处理。

如果使用
com.parse.ParseFile
,则使用
getData()
等待数据。不要使用
getDataInBackground()

对于
ParseQuery
,使用
find()


您的问题是
BackEndUtils.downloadIntroImage(list)
在检索数据之前返回,因此
imageView\u intro.setImageBitmap(list.get(0))
将看到一个空列表。

如果任何人遇到此问题或任何其他类似问题,此特定情况是由于后台线程未按时完成,因此未按预期返回值造成的。这就是为什么使用getData而不是getDataInBackground是有效的。

当你说
内部类
时,你是指
done
方法中的
匿名类
吗?大概,
tempFile.getDataInBackground
将启动一个线程并在后台执行工作。直到“以后”你才会看到结果。如果您“现在”需要结果,请不要在后台工作。@Andreas不,我只需要能够访问在“完成”方法中发送的结果。我不在乎什么时候完成。我只需要访问它并将它保存到一个变量中,返回它或将它保存到某个地方。我确切地知道您正在经历什么。在匿名块中只能访问最终变量,而这些变量不可修改。在使用Smart GWT时也面临同样的问题。告诉您在这些块中可以访问哪些类级变量,即使这些变量是非最终变量并且得到了正确更新。您可能希望确保执行块,因为回调多次都是异步的,给人的印象是值没有得到更新。@digidude该问题与
final
无关。无法重新分配参数
list
,但它引用的列表可以更新,没问题。我想我明白你的意思了。我现在就去试试!成功了。我爱你:D我将在我自己的后台线程上运行它。
public static void  downloadIntroImage(final List<Bitmap> list){
    ParseQuery query = new ParseQuery("Intro");
    query.whereEqualTo("name","intro");

    //BEUFindCallBack beuFindCallBack = new BEUFindCallBack("image");
    query.findInBackground(new FindCallback<ParseObject> (){

        @Override
        public void done(List<ParseObject> parseObjects, com.parse.ParseException e) {
            for(ParseObject tempObject: parseObjects){
                ParseFile tempFile = (ParseFile)tempObject.get("image");
                tempFile.getDataInBackground(new GetDataCallback() {
                    @Override
                    public void done(byte[] bytes, com.parse.ParseException e) {
                        list.add(bytesToBitMap(bytes));
                    }
                });
            }
        }
    });
}

public static Bitmap bytesToBitMap(byte[] bytes){
    Bitmap bitmap = BitmapFactory
                            .decodeByteArray(
                                    bytes, 0,
                                    bytes.length);
    return bitmap;
}