получение изображений из хранилища firebase в android

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

Это моя деятельность:

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();
        }
    }
}

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


person Adi    schedule 14.07.2016    source источник
comment
Что возвращает ноль? Методы в вашем классе Level: void. У вас есть logcat или отладочные отпечатки?   -  person Bill    schedule 14.07.2016
comment
извините, я не ясно выразился. эта команда: pictureRef.getFile(f).addOnSuccessListener(new OnSuccessListener‹FileDownloadTask.TaskSnapshot›() не возвращает мне изображение из моей базы огня, когда оно находится в этом классе уровня   -  person Adi    schedule 14.07.2016


Ответы (1)


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

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

person Benjamin Wulfe    schedule 16.09.2016