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[] и вытащить из внутреннего класса !?

Странно, если я отправляю изображение и устанавливаю битмапимер внутри внутреннего класса, он работает. Но я хочу, чтобы убрать байтовый массив из внутреннего анонимного класса и сохранить его где-нибудь, чтобы потом работать над ним.

+0

Когда вы говорите «внутренний класс», вы имеете в виду «анонимный класс» внутри метода «done»? – Andreas

+0

@ Андреас да! :) –

+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.

Смежные вопросы