【问题标题】:How to setValue of Image from Firebase recycler adapter?如何从 Firebase 回收器适配器设置图像的值?
【发布时间】:2017-04-14 08:14:11
【问题描述】:

我想从 Firebase 数据库中设置 Image url 的值来查看,但没有找到结果。我认为对于普通的 firebase 程序员来说这很容易。请帮助我。

这是我的代码:

Veglist.java

public static class VegViewHolder extends RecyclerView.ViewHolder {

    public View mView;
    private ImageView postImage;
    private TextView quantityBox,postVegName,postPrice,postPriceTag;
    private ImageButton reducequantityButton,increaseQuantityButton;
    private Button add;
    private String mPostKey=null;
    String totalCost;


    public VegViewHolder(final View itemView) {
        super(itemView);
        mView = itemView;


        add=(Button)mView.findViewById(R.id.add);
        quantityBox=(TextView)mView.findViewById(R.id.quantity);
        reducequantityButton = (ImageButton) mView.findViewById(R.id.downQuantitybutton);
        increaseQuantityButton = (ImageButton) mView.findViewById(R.id.upQuantitybutton);
                cartobject.child("Name").setValue(postVegName.getText().toString().trim());
cartobject.child("Image").setValue(postImage.toString()); cartobject.child("Price").setValue(postPrice.getText().toString().trim()); cartobject.child("PriceTag").setValue(postPriceTag.getText().toString().trim()); cartobject.child("Quantity").setValue(quantityBox.getText().toString());

                totalCost = String.valueOf(Integer.parseInt(quantityBox.getText().toString()) * Integer.parseInt(postPrice.getText().toString()));

                cartobject.child("Total").setValue(totalCost).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        p.dismiss();
                        Toast.makeText(mView.getContext(), postVegName.getText().toString().trim() + " successfully added to cart! ", Toast.LENGTH_SHORT).show();
                        add.setText("Added");
                        add.setBackgroundColor(Color.parseColor("#FF5625D2"));


                    }

                });
            }
        });





    }

    public void setName(String name) {
        postVegName = (TextView) mView.findViewById(R.id.vegName);
        postVegName.setText(name);

    }

    public void setPrice(String price) {
        postPrice = (TextView) mView.findViewById(R.id.VegPrice);
        postPrice.setText(price);


    }

    public void setPriceTag(String priceTag)
    {
        postPriceTag=(TextView)mView.findViewById(R.id.PriceTag);
        postPriceTag.setText(priceTag);
    }

    public void setImage(Context context, String image) {
        postImage = (ImageView) mView.findViewById(R.id.VegImg);
        Picasso.with(context).load(image).into(postImage);
    }






}

public void setUpVegAdapter(final Query reference) {

    vegRecyclerAdapter = new FirebaseRecyclerAdapter<Veg, VegViewHolder>
            (

                    Veg.class,
                    R.layout.row_layout_veg,
                    VegViewHolder.class,
                    mainReference
            )

    {
        @Override
        protected void populateViewHolder(final VegViewHolder viewHolder, final Veg model, int position) {


            try {


                viewHolder.setName(model.getName());
                viewHolder.setPrice(model.getPrice());
                viewHolder.setPriceTag(model.getPriceTag());
                viewHolder.setImage(getApplicationContext(), model.getImage());


            } catch (Exception e) {
                Log.e("start error", "useless");
            }


        }


    };


}

图片应该用什么?

cartobject.child("Image").setValue(??????????);

【问题讨论】:

  • 如果图片来自URL,为什么不存储URL?
  • 你能告诉我如何存储图像 URL 吗?以上是我的代码..
  • 假设 ref 是您希望 URL 所在的 FirebaseReferenceurl 一个 String 与您要保存的图像的 url,您可以写 ref.setValue( url );

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

推荐的方法是使用Glide 并传入照片 URL。

Firebase Android Codelab 在step 7 中有一个如何执行此操作的示例(为 Glide 执行 ctrl+f)。

【讨论】:

    【解决方案2】:

    如果您知道图像视图中的图像 URL 做吧

        cartObject.child("image).setValue(urlOfImage.tostring)
    

    如果您想先从手机上传,您可以这样做

    先添加这个

    public Uri resultUri=null;
    private ImageView postImage;
    

    然后第二次初始化

     postImage=(ImageView) findViewById(R.id.postImage);
    

    ImageView 的第三个 setOnclickListner

     postImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CropImage.startPickImageActivity(this);
                }
            });
    

    然后你做

      @Override
      @SuppressLint("NewApi")
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE && resultCode == AppCompatActivity.RESULT_OK) {
    
            Uri imageUri = CropImage.getPickImageResultUri(this, data);
            CropImage.activity(imageUri)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .start(this);
            Log.d(TAG, "After image select");
        }
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                resultUri = result.getUri();
                profilepic.setImageURI(resultUri);
            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                Exception error = result.getError();
            }
            Log.d(TAG, "After image crop");
        }
    }
    
    public void uploadImage() {
    
        StorageReference riversRef = mStorageRef.child(resultUri.getLastPathSegment());
    
        riversRef.putFile(resultUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // Get a URL to the uploaded content
                       postImageUrlToString = taskSnapshot.getDownloadUrl().toString();
    
                       cartObject.child("image").setValue( postImageUrlToString)
    
    
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle unsuccessful uploads
                        // ...
                      //  updateUserData(nametext.getText().toString(),getUriToDrawable(ProfileActivity.this, R.drawable.ic_account_black_56dp));
    
                    }
                });
    }
    

    你可能需要这个依赖

    compile 'com.theartofdev.edmodo:android-image-cropper:2.3.+'
    

    【讨论】:

    • 请重新格式化您的问题,现在所有问题都显示为code
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多