В моей работе я использую 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();
}
}
}
Может кто-нибудь, пожалуйста, помогите мне выяснить, что происходит не так?
Что возвращает null? Методы в вашем классе уровня «void». У вас есть логарифмические или отладочные отпечатки? – Bill
Извините, я не был ясен. эта команда: "" "pictureRef.getFile (f) .addOnSuccessListener (новый OnSuccessListener()" не возвращает мне изображение из моей firebase, когда оно находится в этом классе уровня –
Adi