2017-12-27 64 views
1

Firebase Storage에 이미지를 업로드하는 것을 배우고 있지만, 앱을 실행/실행하고 업로드 할 이미지를 선택할 때 파이어베이스에 업로드 할 이미지가 없습니다 스토리지 코드를 작성하는 실수를 도와주세요.안드로이드의 Firebase Storage에 이미지를 업로드 할 수 없습니다.

의 AndroidManifest.xml :

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

MainActivity.java :

package com.fireapp.newfireapplication; 

import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 

public class MainActivity extends AppCompatActivity { 

    private StorageReference storageReference; 
    private static final int GALLERY_INTENT=1; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     storageReference = FirebaseStorage.getInstance().getReference(); 
    } 

    public void buttonClicked(View view) { 
     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.setType("image/*"); 
     startActivityForResult(intent,GALLERY_INTENT); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == GALLERY_INTENT && requestCode == RESULT_OK){ 
      Uri uri = data.getData(); 
      StorageReference filepath = storageReference.child("Photos").child(uri.getLastPathSegment()); 
      filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        Toast.makeText(MainActivity.this,"Image Uploaded",Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
    } 
} 

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="16dp" 
    tools:context="com.fireapp.newfireapplication.MainActivity"> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Upload Image" 
     android:onClick="buttonClicked"/> 

</LinearLayout> 
+0

당신이 ** 토스트 ** "업로드 이미지"를 가지고 있나요 시도? 그렇지 않은 경우 OnFailure 리스너를 추가하고 오류 메시지를 공유하십시오. –

+0

무슨 오류있어? ?? –

+0

https://github.com/AtifAbbAsi19/Firebase-Helper이 링크를 사용해보십시오.! –

답변

0

다음 전체 코드를 사용해보십시오.

1. 이미지를 progressDialog를 사용하여 Firebase에 업로드하십시오.

2. 이미지 크기를 줄인 다음 Firebase에 보내십시오.

uploadimage_firebase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if(filePath != null) { 

        progressDialog.setCancelable(false); 
        progressDialog.show(); 

        Log.d("file.getName()","*** "+filePath); 
        File file= new File(filePath.getPath()); 
        file.getName(); 


        /* Compress Image file size below code  */ 


        Bitmap bmp = null; 
        try { 

         bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 

        } catch (IOException e) { 

         Log.d("PrintIOExeception","*****  "+e.toString()); 
         e.printStackTrace(); 
         } 

        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos); 
        byte[] data = baos.toByteArray(); 



        //uploading the image // 
        UploadTask uploadTask = storageRef.child(file.getName()).putBytes(data); 


        uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
         @Override 
         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
          progressDialog.dismiss(); 

         Uri urlvalues = taskSnapshot.getDownloadUrl(); 

         Log.d("displayimageurls","**** "+urlvalues); 


          Toast.makeText(Firebase_Imageuploading.this, "Upload successful", Toast.LENGTH_SHORT).show(); 
         } 
        }).addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(@NonNull Exception e) { 
          progressDialog.dismiss(); 

          Log.d("printimaguploadfaild","***** "+e.toString()); 

          Toast.makeText(Firebase_Imageuploading.this, "Upload Failed -> " + e, Toast.LENGTH_SHORT).show(); 
         } 
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
         @Override 
         public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 
          //calculating progress percentage 
          double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 

          //displaying percentage in progress dialog 
          progressDialog.setMessage("Uploaded " + ((int) progress) + "%..."); 
         } 
        }); 
       } 
       else { 
        Toast.makeText(Firebase_Imageuploading.this, "Select an image", Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 
+0

덧글을 쓰려고 thx하지만 다시는 작동하지 않습니다. (firebase 저장소에 이미지가 보이지 않습니다.) – LearnToProgram

+0

@LearnToProgram ok pbm bro ....'addOnFailureListener (new OnFailureListener() {}'이 메소드를 귀하의 코드는 오류 메시지가 나타납니다 .. 그럼 stackoverflow 게시 ...., 알려줘 –

0

Firebase Helper Class

progressDialog.setMessage(context.getString(R.string.loading)); 
      progressDialog.show(); 


     filePath = mFStorage.child("image").child(getRandomId() + ".png"); 

     filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

       progressDialog.dismiss(); 

       imageUrl = taskSnapshot.getDownloadUrl().toString(); 


      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       progressDialog.dismiss(); 
       //Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 
       //displaying the upload progress 
       double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 
       progressDialog.setMessage("Uploaded " + ((int) progress) + "%..."); 
      } 
     });