【问题标题】:Can't be upload an image in Firebase Storage in android无法在 Android 的 Firebase 存储中上传图片
【发布时间】:2017-12-27 07:39:32
【问题描述】:

我正在学习在 Firebase 存储中上传图片,但是当我运行/打开我的应用并选择要上传的图片时,没有任何图片要上传到 Firebase 存储中,请帮助我在哪里写错了代码。

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>

【问题讨论】:

  • 你有 "Image Uploaded" toast 吗?如果没有,请添加 OnFailure 侦听器并分享您的错误消息。
  • 你遇到了什么错误??

标签: android firebase firebase-realtime-database firebase-storage


【解决方案1】:

试试下面的完整代码。

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

            }
        });

【讨论】:

  • 感谢评论,但它再次对我不起作用:(在 Firebase 存储中不显示任何图像
  • @LearnToProgram ok No pbm bro....addOnFailureListener(new OnFailureListener() {} 请将此方法添加到您的代码中获取错误消息..然后将其发布到 stackoverflow....,让我知道
【解决方案2】:

试试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) + "%...");
            }
        });

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 2021-08-18
    • 2016-11-28
    • 2021-11-21
    • 2021-12-23
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多