Java 从内部类中获取数据
我对一个问题感到非常沮丧。如何访问在内部类中获取的数据。我正在为我的新应用程序的后端使用Parse,但是所有的Parse方法都是匿名使用的,并且都是内部类,因此我无法真正访问检索到的任何内容。有办法绕过它吗 我试过了,但没用。每件事都必须是最终的,期末考试不能在班内改变 这是我的密码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
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;
}