2016-07-20 3 views
1

こんにちは私はイメージのfirebaseのストレージアップロードを実装しています。Android Firebaseアップロードファイル時間

私がやっていることは、自分のギャラリーから画像を選択し、それをImageViewに表示してから、ストレージにアップロードすることです。

すべて動作します。しかし、私が懸念しているのは、初めて画像をアップロードするときです。テストして、ダウンロードパスを返すのに1分ほどかかります。

最初の時間が1秒未満で終わった後。私の問題は、 "画像のアップロード"アクティビティを閉じた後、別のImageViewsにそのパスを使用したいということです。

ここに私のコードです。

私はここに続いて

private View.OnClickListener dialogListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { clicked.length()); 
     final Dialog dialog = new Dialog(EditProfileActivity.this); 
     dialog.setContentView(R.layout.galleryoptions); 
     dialog.setTitle("Gallery Options"); 

     Button gallery = (Button) dialog.findViewById(R.id.buttonGallery); 
     gallery.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       dialog.dismiss(); 
       Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(intent, RESULT_LOAD_IMAGE); 
      } 
     }); 

     dialog.show(); 
    } 
}; 

(私は後でFacebookのオプションが表示されます)ギャラリーを選択するためのダイアログを持っているアクティビティの結果は、電話内のログ「PATHの両方の間の時間

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImage, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     //GET PATHS 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     Log.d(TAG, "PICTURE PATH IN PHONE: " + picturePath); 
     cursor.close(); 
     clicked = "iv_"+clicked; 
     int resID = getResources().getIdentifier(clicked, "id", "com.my.project"); 
     ImageView imageView = (ImageView) findViewById(resID); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

     //UPLOAD FILE TO FIREBASE 
     Uri file = Uri. fromFile(new File(picturePath)); 
     String extension = file.getLastPathSegment(); 
     extension = extension.substring(extension.lastIndexOf(".")); 
     StorageReference riversRef = storageRef.child("images/"+ user.getUid().toString()+"/"+clicked+extension); 
     UploadTask uploadTask = riversRef.putFile(file); 

     // Register observers to listen for when the download is done or if it fails 
     uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
       Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
       Log.d(TAG, "DOWNLOAD PATH IN FIREBASE: " + downloadUrl); 
      } 
     }); 
    } 


} 

です"そして" FIREBASEのPATH "は最初の1分ほどであり、その後はかなり速いです。質問は、あなたが2度目ではなく常にスピードアップロードを行う方法や方法やパターンを知っていますか? あなたは何をお勧めしますか?ストレージの代わりにリアルタイムデータベースを使用してBase64にイメージを保存する方が良いでしょうか?

答えて

-1

FirebaseはGoogle App Engineでバックアップされているため、バックエンドが長期間使用されていない場合、リソースを節約するために基本的に一時停止状態になります。

あなたは、それはそれはあなたがアップロード時間に遅れを見たとき

+0

この場合、状態を一時停止から手動で変更してファイアベース内のバックエンドを再開する方法をご存知ですか?私はfirebaseを初めて使っています。 – Sergio

+0

あなたはそれを行うことはできません – tyczj

+0

hehe okありがとう! – Sergio

1

Firebaseストレージは、App Engineの(それ株式に裏付けされていないされ、すべてをバックアップスピンする必要があり、この一時停止状態にある場合、要求を作るために行きますデフォルトのGCSバケットは同じですが、GAEでは実行されません)、なぜそれが最初に遅いと思うかも理解できます。

私が考えていることは、サーバーへの基本接続が最初のインスタンスの後にキャッシュされており、ユーザーの場所または同様の問題のために初期の遅延がある可能性があるということです。

あなたはどこの地域にいるのですか?
ダミーアップロード(別のバケットを含む任意の場所)を行うと、速度が向上することを確認できますか?

+0

こんにちはベンジャミン。私は英国以外の地域は試しませんでした。最初のアップロードが1分ぐらいで終わるたびに、他のものはほぼ即座に終了しました。私が最終的に実装したのは、アップロードが進行中の進行状況を示すprogressdialogを含めることでした。実装はhttps://github.com/casertillo/AndroidProjects/blob/master/TutumpDev/app/src/main/です。 java/com/tutump/tutumpdev/Activities/EditProfileActivity.java#L300これは300行目から始まるメソッドです。 – Sergio

関連する問題