1

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

我试过这个,它没有工作。一切都需要是最终的,决赛在内部阶层中不能改变。

这是我的代码。

imageView_intro = (ImageView)findViewById(R.id.imageView_intro); 
    List<Bitmap> list = new ArrayList<Bitmap>(); 
    BackEndUtils.downloadIntroImage(list); 
    imageView_intro.setImageBitmap(list.get(0)); 
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; 
} 

最后,名单仍然有一个大小为0 ...没什么意思实际上是添加到它。我如何访问byte[]变量并退出内部课程!?

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

+0

当你说'内部类'时,你是指'done'方法内的'anonymous class'吗? – Andreas

+0

@Andreas是的! :) –

+0

推测,'tempFile.getDataInBackground'将启动一个线程并在后台执行工作。直到“稍后”才会看到结果。如果你需要“现在”的结果,不要把工作做到背景。 – Andreas

回答

1

如果您使用com.parse.ParseFile,则使用getData()来等待数据。请勿使用getDataInBackground()

ParseQuery相同,使用find()

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

+0

我想我明白你在说什么。我现在要尝试一下! –

+0

它工作。我爱你:D我只是想在自己的后台线程上运行它。 –

0

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