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。