почему изображение не загружается в просмотр списка с помощью firebase - PullRequest
0 голосов
/ 26 ноября 2018
public class ImageListAdapter extends ArrayAdapter<ImageUpload> {
    private Activity context;
    private int resource;
    private List<ImageUpload> listImage;

public ImageListAdapter(@NonNull Activity context, @LayoutRes int resource, 
@NonNull List<ImageUpload> objects) {
    super(context, resource, objects);
    this.context = context;
    this.resource = resource;
    listImage = objects;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull 
ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();

    View v = inflater.inflate(resource, null);
    TextView tvName = v.findViewById(tvImageN);
    ImageView img =  v.findViewById(R.id.imgView);

    tvName.setText(listImage.get(position).getName());
    //i think the is in this code, the image dont load in the listview

/ * имя показывается в виде списка, но изображение нет, я пытался изменить правила Firebase, но это то же самое * / Picasso.with (context) .load (listImage.get (position) .getUrl ()). into (img);

    return v;

}

}

// это класс отображения, в котором будут отображаться изображение и имя / * я сделал все правила истинными ия добавил интернет-разрешение и чтение и запись, но все тот же

* /

открытый класс ImageDsiplay расширяет AppCompatActivity {

private DatabaseReference mDatabaseRef;
private List<ImageUpload> imgList;
private ListView lv;
private ImageListAdapter adapter;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_dsiplay);

    imgList = new ArrayList<>();
    lv = findViewById(R.id.ListViewImage);
    //Show progress dialog during list image loading
    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Please wait loading list image...");
    progressDialog.show();

    mDatabaseRef = FirebaseDatabase.getInstance().getReference(CamerGallery.FB_DATABASE_PATH);

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            progressDialog.dismiss();

            //Fetch image data from firebase database
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                //ImageUpload class require default constructor
                ImageUpload img = snapshot.getValue(ImageUpload.class);
                imgList.add(img);

            }


            //Init adapter
            adapter = new ImageListAdapter(ImageDsiplay.this, R.layout.image_item, imgList);
            //Set adapter for listview
            lv.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            progressDialog.dismiss();
        }
    });

}

}

// это класс, куда он загружает файлы в базу данных и хранит их там

открытый класс CamerGallery расширяет AppCompatActivity {

private StorageReference mStorageRef;
private DatabaseReference mDatabaseRef;
private ImageView imageView;
private EditText txtImageName;
private Uri imgUrl;
Context context;


public static final String STORAGE_PATH = "image/";
public static final String FB_DATABASE_PATH = "image";
public static final int REQUEST_CODE = 1234;

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

    mStorageRef = FirebaseStorage.getInstance().getReference();
    mDatabaseRef = FirebaseDatabase.getInstance().getReference(FB_DATABASE_PATH);

    imageView = findViewById(R.id.imageView);
    txtImageName = findViewById(R.id.txtImageName);
}

public void btnBrowse_Click(View v) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select image"), REQUEST_CODE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null && data.getData() != null) {
        imgUrl = data.getData();

        try {

            Bitmap bm = MediaStore.Images.Media.getBitmap(getContentResolver(), imgUrl);
            imageView.setImageBitmap(bm);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public String getImageExt(Uri uri) {
    ContentResolver contentResolver = getContentResolver();
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}

public void btnUpload_Click(View v) {
    if (imgUrl != null) {
        final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setTitle("Uploading image");
        dialog.show();

        //get the storage refrence
        final StorageReference ref = mStorageRef.child(STORAGE_PATH + System.currentTimeMillis() + "." + getImageExt(imgUrl));

        //add file to refrence

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

                dialog.dismiss();
                Toast.makeText(getApplicationContext(), "Image Uploaded", Toast.LENGTH_SHORT).show();


                ImageUpload imageUpload = new ImageUpload(txtImageName.getText().toString(), ref.getDownloadUrl().toString());

                String uploadId = mDatabaseRef.push().getKey();
                mDatabaseRef.child(uploadId).setValue(imageUpload);

                //imageView.setImageResource(0);
                //txtImageName.setText("");s

            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                        dialog.dismiss();
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

                        double progress = (100 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                        dialog.setMessage("Upload " + (int) progress + "%");
                    }
                });
    } else {
        Toast.makeText(getApplicationContext(), "Please Select Image", Toast.LENGTH_SHORT).show();
    }

}


public void btnShowListImage_Click(View v) {
    Intent i = new Intent(CamerGallery.this, ImageDsiplay.class);
    startActivity(i);
}

}

страница хранилища Страница базы данных

1 Ответ

0 голосов
/ 26 ноября 2018

после вашего комментария стало яснее, что ваша проблема заключалась в попытке создать новый ImageUpload таким образом ImageUpload img = snapshot.getValue(ImageUpload.class);, что неправильно.Вместо этого используйте это ImageUpload img = new ImageUpload (snapshot.getKey(), snapshot.getValue().toString());:

@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        progressDialog.dismiss();

        //Fetch image data from firebase database
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            //ImageUpload class require default constructor

            ImageUpload img = new ImageUpload (snapshot.getKey(), snapshot.getValue().toString());
            imgList.add(img);

    }
}

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...