2016-07-14 17 views
0

私の活動ではFireBaseを使って私のゲームの写真をストレージからダウンロードしています。 私のアクティビティでこのコードを実行すると動作しますが、レベルクラスでメソッドとして使用するとnullが返されます。androidのfirebase storageから画像を取得する

これが私の活動です:レベルのクラスで

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

動作しません。この私のコードとnullを返します。

これは私のレベルのクラスです:

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を返すのは何ですか?あなたのLevelクラスのメソッドは 'void'です。あなたはlogcatやデバッグのプリントを持っていますか? – Bill

+0

申し訳ありませんが、私は明確ではありませんでした。次のコマンド: "" "pictureRef.getFile(f).addOnSuccessListener(新しいOnSuccessListener ()" このLevelクラスの画像がFirebaseから返されません – Adi

答えて

0

レベルクラスで異なる参照をダウンロードしていますので、これはリンゴとオレンジの比較のようです。

addOnSuccessに加えてaddOnFailureを追加してみてください。これらの他のファイルには404が表示されていると思われます。

関連する問題