【问题标题】:Volley Image Download along with Other data using JSON使用 JSON 下载 Volley 图像以及其他数据
【发布时间】:2017-02-21 06:30:40
【问题描述】:

主要活动类

package com.example.shubham.myproductsale;

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerView.Adapter reAdapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<ListProvider> arrayList= new ArrayList<ListProvider>();
    ArrayList<String> url= new ArrayList<String>();
    int i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView= (RecyclerView)findViewById(R.id.recyclerview);
        layoutManager= new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        //-------> Add data from server
        JsonArrayRequest jsonArrayRequest= new JsonArrayRequest(Request.Method.POST, "http://192.168.56.1/myDataset.php", null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                JSONArray jsonArray= response;
                int len= jsonArray.length();
                for(int i=0; i<len; i++){
                    try{
                        JSONObject object= jsonArray.getJSONObject(i);
                        url.add(object.getString("product_url").replace("localhost", "192.168.56.1"));
                        ListProvider listProvider= new ListProvider(object.getInt("product_id"),object.getString("product_name"),object.getString("product_url").replace("localhost", "192.168.56.1"),object.getString("product_desc"));
                        arrayList.add(listProvider);
                    }
                    catch (Exception e){
                        Toast.makeText(getApplicationContext(), "Something Exception", Toast.LENGTH_SHORT).show();
                    }

                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_SHORT).show();
            }
        });
        MySingletonClass.getInstance(getApplicationContext()).addToQue(jsonArrayRequest);

        for( i=0; i< url.size(); i++){
            ImageRequest imageRequest= new ImageRequest(url.get(i), new Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap response) {
                    arrayList.get(i).setBitmapImage(response);

                }
            }, 0, 0,null , new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), "Something went wrong in downloading", Toast.LENGTH_SHORT).show();
                }
            });
            MySingletonClass.getInstance(getApplicationContext()).addToQue(imageRequest);
        }

        //-----------------------------
        reAdapter= new ListAdapter(arrayList);
        recyclerView.setAdapter(reAdapter);
    }
}

我的 ListProvider 类

package com.example.shubham.myproductsale;

import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley;

/**
 * Created by SHUBHAM on 20-02-2017.
 */

public class ListProvider {
    private int pId;
    private String pName, pUrl, pDesc;
    private Bitmap bm;


    public ListProvider(int pid, String pname, String purl, String pdesc) {
        this.setpDesc(pdesc);
        this.setpId(pid);
        this.setpName(pname);
        this.setpUrl(purl);

    }

    public int getpId() {
        return pId;
    }

    public void setpId(int pId) {
        this.pId = pId;
    }

    public String getpName() {
        return pName;
    }

    public Bitmap getBitmapImage(){
        return bm;
    }

    public void setpName(String pName) {
        this.pName = pName;
    }

    public String getpUrl() {
        return pUrl;
    }

    public void setpUrl(String pUrl) {
        this.pUrl = pUrl;
    }

    public String getpDesc() {
        return pDesc;
    }

    public void setBitmapImage(Bitmap bm){
        this.bm= bm;
    }

    public void setpDesc(String pDesc) {
        this.pDesc = pDesc;
    }

}

我的 ListAdapter 类

package com.example.shubham.myproductsale;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by SHUBHAM on 20-02-2017.
 */

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.RecyclerViewHolder> {
    ArrayList<ListProvider> arrayList;
    public ListAdapter(ArrayList<ListProvider> arrayList) {
         this.arrayList= arrayList;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view;
        RecyclerViewHolder recyclerViewHolder;
        view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_display_layout, parent, false);
        recyclerViewHolder= new RecyclerViewHolder(view);
        return recyclerViewHolder;
    }
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {

        ListProvider listProvider;
        listProvider= arrayList.get(position);
        holder.textView.setText(listProvider.getpName());
        holder.imageView.setImageBitmap(listProvider.getBitmapImage());

    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }
    public static class RecyclerViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public ImageView imageView;

        public RecyclerViewHolder(View itemView) {
            super(itemView);
            textView= (TextView)itemView.findViewById(R.id.textView);
            imageView= (ImageView)itemView.findViewById(R.id.imageView);


        }
    }
}

我正在使用 recyclerview 创建一个 CUSTOM LISTVIEW,我需要一些文本和一个图像作为一个列表数据。我可以从服务器获取文本数据,但无法下载图像。

我正在使用 Wamp 服务器来测试应用程序。 NB- 创建的视图没有问题。

【问题讨论】:

  • listProvider.getBitmapImage() 你在 onBindViewHolder 中得到了什么?请调试并给予响应
  • 如果您使用 volley,那么我的建议是使用 NetworkImageView 而不是简单的图像视图。
  • 我得到空@Zaki
  • 表示您的图像名称不是来自您的服务器?请正确检查。你的arrayList 不包含图像?请检查设置是否正确
  • arrayList.get(i).setBitmapImage(response);她你在arrayList中设置你的图像。请检查您的回答是否正确。发布您的 JSON 响应数据

标签: android json android-studio android-volley


【解决方案1】:

您必须在此处添加您的 URL 链接。改一下就行了

holder.imageView.setImageBitmap(listProvider.getBitmapImage());

有了这个

holder.imageView.setImageBitmap("your link to the folder where this image stores"+listProvider.getBitmapImage());

希望对你有帮助

【讨论】:

  • 不,这不起作用,因为所需的参数是位图并且您正在发送字符串
  • 查看我上面的评论
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 2018-06-17
  • 2015-10-21
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
相关资源
最近更新 更多