2016-07-14 5 views
0

В моей работе я использую FireBase для загрузки фотографий моей игры из хранилища. Если я запустил этот код в своей работе, он работает, но если я использую его в своем классе уровня как метод, он просто возвращает значение null.Получение изображений из хранилища firebase в android

Это моя активность:

pic = null; 
answer = null; 
option = null; 
picture = null; 
try { 
    answer = File.createTempFile("buttonanswer", "png"); 
    StorageReference storageRef = storage.getReferenceFromUrl("gs://yougotit-8ce92.appspot.com"); 
    StorageReference levelDifficultRef = storageRef.child("easy"); 
    final StorageReference levelRef = levelDifficultRef.child(Game.LEVEL + 1); 
    StorageReference levelAnswerRef = levelRef.child("pic" + "." + "jpg"); 

    levelAnswerRef.getFile(answer).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
      answerV = new ImageView(getApplicationContext()); 
      Bitmap myBitmap = BitmapFactory.decodeFile(answer.getPath()); 
      answerV.setImageBitmap(myBitmap); 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        maingameLinarLayout.addView(answerV); 
       } 
      }); 
     } 
    }); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

В классе уровня это мой код, который не работает и возвращает нуль.

Это мой класс уровень:

public class Level { 

    public static final String ANSWER="answer"; 
    public static final String OPTION="ops"; 
    public static final String PICTURE="pic"; 
    public static final String QUESTION="question"; 
    public static final String PNG = "png"; 
    public static final String JPG = "jpg"; 


    private File mainPicture,fadedPicture,opt1,opt2,opt3,answer,question; 
    private int flag;//in easy level when reach to 6 it indicate that that level is ready //in medium and hard level when reach to 7 
    private StorageReference storageRef; 
    private String difficult; 
    private Game game; 



    public Level(Game game,FirebaseStorage storageIns,String difficult,int level) { 
     flag = 0 ; 
     this.game = game; 
     this.difficult = difficult; 
     this.storageRef = storageIns.getReferenceFromUrl("gs://yougotit-8ce92.appspot.com"); 
     StorageReference levelDifficultRef = storageRef.child(difficult); 
     final StorageReference levelRef = levelDifficultRef.child(Game.LEVEL+level); 

     if(difficult.equals(Game.LEVEL_HARD)) { 

     } 
     if(difficult.equals(Game.LEVEL_MEDIUM)) { 

     } 
     else { 
      downloadPicture(levelRef, mainPicture, PICTURE, JPG); 
      downloadPicture(levelRef, answer, ANSWER, PNG); 
      downloadPicture(levelRef, opt1, OPTION + 1, PNG); 
      downloadPicture(levelRef, opt2, OPTION + 2, PNG); 
      downloadPicture(levelRef, opt3, OPTION + 3, PNG); 
     } 
    } 

    private void downloadPicture(StorageReference levelRef,File f,String picName,String picFormat) { 
     StorageReference pictureRef = levelRef.child(picName+"."+picFormat); 
     f = null; 
     try { 
       f = File.createTempFile(picName,picFormat); 
       pictureRef.getFile(f).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
        flag++; 
        if(flag == 5) { 
         activeCallBack(); 
        } 
       } 
      }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Может кто-нибудь, пожалуйста, помогите мне выяснить, что происходит не так?

+1

Что возвращает null? Методы в вашем классе уровня «void». У вас есть логарифмические или отладочные отпечатки? – Bill

+0

Извините, я не был ясен. эта команда: "" "pictureRef.getFile (f) .addOnSuccessListener (новый OnSuccessListener ()" не возвращает мне изображение из моей firebase, когда оно находится в этом классе уровня – Adi

ответ

0

Вы загружаете разные ссылки в своем классе уровня, чтобы это выглядело как сравнение яблок с апельсинами.

Попробуйте добавить addOnFailure в дополнение к addOnSuccess, поскольку я подозреваю, что вы получаете 404 для этих других файлов.

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