【发布时间】:2021-09-29 10:15:16
【问题描述】:
我想在数据库中上传用户个人资料图片,然后在片段中显示所有用户的列表。为了将图像资源设置为 imageview,我使用 Glide,当上传到数据库时,我在 base64 中对图像进行编码,我可以从数据库中获取图像路径,但是当设置为 imageview 时不显示任何内容。并且没有显示错误。从数据库检索后是否需要解码?
private void ChooseFile(){
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select picture"),1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1 && resultCode== RESULT_OK && data!=null && data.getData()!=null){
Uri filepath=data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),filepath);
profile_image.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
UploadPicture(getID,getStringimage(bitmap));
}
}
private void UploadPicture(final String id, final String photo){
final ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.setTitle("Uploading your Image");
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setIndeterminate(false);
progressDialog.show();
String uRlP = "http://192.168.8.193:80/worker/Userupload.php";
StringRequest request = new StringRequest(Request.Method.POST, uRlP, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Login", "Connected");
try {
JSONObject jsonObject=new JSONObject(response);
progressDialog.dismiss();
if(!jsonObject.getBoolean("error")){
String getp=jsonObject.getString("photo");
Log.d("Omag", getp);
usersession.setImage(getp);
Toast.makeText(getContext(),"Upload Successfully",Toast.LENGTH_LONG).show();
Log.d("UploadImg", "Sucess");
}else{
Toast.makeText(getContext(),jsonObject.getString("message"),Toast.LENGTH_LONG).show();
progressDialog.dismiss();
}
} catch (JSONException e) {
e.printStackTrace();
progressDialog.dismiss();
Toast.makeText(getContext(),"Try Again!",Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> param = new HashMap<>();
param.put("id",id);
param.put("photo",photo);
return param;
}
};
request.setRetryPolicy(new DefaultRetryPolicy(30000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
MySingleton.getmInstance(getContext()).addToRequestQueue(request);
}
public String getStringimage(Bitmap bitmap){
ByteArrayOutputStream byteArrayOutputStream= new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
byte[] imageByteArray=byteArrayOutputStream.toByteArray();
String econdeImage= Base64.encodeToString(imageByteArray,Base64.DEFAULT);
return econdeImage;
}
这段代码从数据库中取回并在 imageview 中设置。
private void getAllData() {
final ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.setTitle("Reading your details");
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setIndeterminate(false);
progressDialog.setMax(100);
//progressDialog.show();
String uRl = "http://192.168.8.193:80/worker/getWorkers.php";
StringRequest request = new StringRequest(Request.Method.GET, uRl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// progressDialog.dismiss();
Log.d("HomeLogin", "Connected");
if(!response.equals("error")) {
try {
JSONArray array = new JSONArray(response);
Log.d("Home", array.getString(1));
for (int i = 0; i < array.length(); i++) {
Log.d("responess", i+" ");
JSONObject object = array.getJSONObject(i);
int id = object.getInt("id");
String name = object.getString("name");
String email = object.getString("email");
String gender = object.getString("gender");
String mobile = object.getString("mobile");
String image = object.getString("photo");
Log.d("photo", image);
// String rate = String.valueOf(rating);
//float newRate = Float.valueOf(rate);
float rate = 1.2f;
UserData user_data = new UserData(id, name, email, mobile, gender, image, rate);
User_Data.add(user_data);
}
} catch (Exception e) {
Toast.makeText(getContext(),response+""+e,Toast.LENGTH_LONG).show();
Log.d("ErrorH", response+""+e);
}
mAdapter = new RecyclerAdapter(getContext(), User_Data);
recyclerView.setAdapter(mAdapter);
}else {
Toast.makeText(getContext(),response,Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.dismiss();
Toast.makeText(getContext(), error.toString(),Toast.LENGTH_LONG).show();
}
});
request.setRetryPolicy(newDefaultRetryPolicy(30000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
MySingleton.getmInstance(getContext()).addToRequestQueue(request);
}
我的 Recycler 视图适配器类,(在 imageview 中设置)
@Override
public void onBindViewHolder(@NonNull RecyclerAdapter.MyViewHolder holder, int position) {
UserData userInfo = userData.get(position);
holder.mPrice.setText("Phone: "+userInfo.getMobile());
holder.mRate.setRating(userInfo.getRating());
holder.mTitle.setText(userInfo.getName());
Glide.with(mContext).load(userInfo.getImage()).into(holder.mImageView);
holder.mContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext,DetailActivity.class);
intent.putExtra("name",userInfo.getName());
intent.putExtra("image",userInfo.getImage());
intent.putExtra("rate",userInfo.getRating());
intent.putExtra("phone",userInfo.getMobile());
mContext.startActivity(intent);
}
});
}
but nothing displayed. is it need to decode again the image? when retrieved from the database?
【问题讨论】:
-
当你在 "getAllData()" 中调用 api 时,你在 "object.getString("photo")" 中得到了什么?图片网址还有什么?
-
您可以使用 glide 直接加载此图像 url。如果这没有加载,那么首先检查适配器是否获取图像 URL。如果您在适配器中获取图像 url,则在浏览器中打开 URL。如果这些都不起作用,则解码保存的图像并将其转换为 bimap 然后设置。
-
你有转换的示例代码吗?当我浏览图片 URL 时,我得到了图片。
-
嘿,我发现了问题。它显示了这个。:W/Glide: Load failed for 192.168.155.193/worker/profile_image/13.jpeg with size [510x450] class com.bumptech.glide.load.engine.GlideException: 加载资源失败有 1 个根本原因:这意味着问题出在图像的大小。这个怎么解决??
标签: android mysql image android-recyclerview android-volley