Volley Image使用JSON下载其他数据

时间:2017-02-21 06:30:40

标签: android json android-studio android-volley

主要活动类

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服务器来测试应用程序。 注意 - 创建的视图没有问题。

1 个答案:

答案 0 :(得分:0)

您必须在此处添加您的网址链接。只需改变这个

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

用这个

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

希望这有帮助