Java 如何在android的自定义列表适配器中显示来自服务器的带有标题和说明的图像

Java 如何在android的自定义列表适配器中显示来自服务器的带有标题和说明的图像,java,android,android-asynctask,custom-adapter,custom-lists,Java,Android,Android Asynctask,Custom Adapter,Custom Lists,我正在使用PHP和Mysql创建一个应用程序,它在标签片段中显示带有图像、标题、描述和价格的自定义列表视图 为了实现这一点,我使用itemlistasynctask内部类创建了一个ProductTabs类,该类用于获取除图像下载之外的项目详细信息 产品选项卡类别: public class ProductTabs extends Fragment { HttpHandler httpHandler = new HttpHandler(); JSONArray items = n

我正在使用PHP和Mysql创建一个应用程序,它在标签片段中显示带有图像、标题、描述和价格的自定义列表视图

为了实现这一点,我使用itemlistasynctask内部类创建了一个ProductTabs类,该类用于获取除图像下载之外的项目详细信息

产品选项卡类别:

public class ProductTabs extends Fragment {

    HttpHandler httpHandler = new HttpHandler();
    JSONArray items = null;
    ArrayList<HashMap<String,String>> list;
    ProgressDialog progressDialog = null;
    private static String url_products = "";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    private static String JSON_PRODUCT_ID = "product_id";
    private static String JSON_PRODUCT_NAME = "product_name";
    private static String JSON_PRODUCT_PRICE = "product_price";
    private static String JSON_PRODUCT_DESC = "product_desc";
    private static String JSON_PRODUCT_URL = "url";
    private static String JSON_PRODUCT_IMAGE = "product_image";

    ListView productList;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.product_tabs, container, false);
        productList = (ListView) v.findViewById(R.id.productList);

        if(this.getTag() == "Popular") {
            url_products = "http://kamalevent.com/cakeshop/products.php";
        } else {
            url_products = "http://kamalevent.com/cakeshop/products.php?sort_by=product_price";
        }

        list = new ArrayList<HashMap<String, String>>();

        new ItemList().execute();
        return v;
    }

    class ItemList extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Fetching Cakelist...");
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {

            String json = httpHandler.makeHttpRequest(url_products, "GET");
            Log.d("Response :", json);

            if(json != null) {
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    items = jsonObject.getJSONArray(TAG_PRODUCTS);

                    for(int i=0; i < items.length(); i++) {
                        JSONObject product = items.getJSONObject(i);

                        String id = product.getString(JSON_PRODUCT_ID);
                        String name = product.getString(JSON_PRODUCT_NAME);
                        String price = product.getString(JSON_PRODUCT_PRICE);
                        String desc = product.getString(JSON_PRODUCT_DESC);
                        String url = product.getString(JSON_PRODUCT_URL);

                        HashMap<String,String> products = new HashMap<String,String>();
                        products.put(JSON_PRODUCT_ID, id);
                        products.put(JSON_PRODUCT_NAME, name);
                        products.put(JSON_PRODUCT_DESC, desc);
                        products.put(JSON_PRODUCT_PRICE, price);
                        products.put(JSON_PRODUCT_URL, url);

                        list.add(products);

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            progressDialog.dismiss();

            ProductAdapter productAdapter = new ProductAdapter(getActivity(), R.layout.item_list, list);
            productList.setAdapter(productAdapter);
            productAdapter.notifyDataSetChanged();
        }
    }



}
public class ProductAdapter extends ArrayAdapter<HashMap<String, String>> {

    private ArrayList<HashMap<String,String>> products;
    private Context context;
    private View view;
    private int resource;
    private HashMap<String,String> hashMap;

    public ProductAdapter(Context context, int resource, ArrayList<HashMap<String, String>> products) {
        super(context, resource, products);
        this.context = context;
        this.resource = resource;
        this.products = products;
    }

    public class ValueHolder {
        TextView name, desc, price;
        ImageView image;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(resource, parent, false);

        ValueHolder valueHolder = new ValueHolder();
        valueHolder.name = (TextView) view.findViewById(R.id.item_title);
        valueHolder.desc = (TextView) view.findViewById(R.id.item_desc);
        valueHolder.price = (TextView) view.findViewById(R.id.item_price);
        valueHolder.image = (ImageView) view.findViewById(R.id.itemImage);

        hashMap = products.get(position);

        valueHolder.name.setText(hashMap.get("product_name"));
        valueHolder.desc.setText(hashMap.get("product_desc"));
        valueHolder.price.setText("Rs. " + hashMap.get("product_price"));
        if(valueHolder.image != null) {
            new GetImage(valueHolder.image).execute(hashMap.get("url"));
        }

        return view;
    }

    class GetImage extends AsyncTask<String, Void, Bitmap> {
        private final WeakReference<ImageView> imageViewWeakReference;

        public GetImage(ImageView imageView) {
            imageViewWeakReference = new WeakReference<ImageView>(imageView);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Bitmap doInBackground(String... args) {
            URL url = null;
            Bitmap image = null;

            String urlToImage = args[0];

            try {
                Log.d("Image :", urlToImage);
                url = new URL(urlToImage);
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return image;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(imageViewWeakReference != null) {
                ImageView imageView = imageViewWeakReference.get();
                if(imageView != null) {
                    if(bitmap != null) {
                        Log.d("Image :", "Image found");
                        imageView.setImageBitmap(bitmap);
                    }
                }
            }
        }
    }

}
公共类ProductTabs扩展片段{
HttpHandler HttpHandler=新的HttpHandler();
JSONArray items=null;
数组列表;
ProgressDialog=null;
私有静态字符串url_products=“”;
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串TAG_PRODUCTS=“PRODUCTS”;
私有静态字符串JSON\u PRODUCT\u ID=“PRODUCT\u ID”;
私有静态字符串JSON\u PRODUCT\u NAME=“PRODUCT\u NAME”;
私有静态字符串JSON\u PRODUCT\u PRICE=“PRODUCT\u PRICE”;
私有静态字符串JSON_PRODUCT_DESC=“PRODUCT_DESC”;
私有静态字符串JSON\u PRODUCT\u URL=“URL”;
私有静态字符串JSON\u PRODUCT\u IMAGE=“PRODUCT\u IMAGE”;
ListView产品列表;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(右布局。产品标签,容器,假);
productList=(ListView)v.findViewById(R.id.productList);
if(this.getTag()=“Popular”){
url_产品=”http://kamalevent.com/cakeshop/products.php";
}否则{
url_产品=”http://kamalevent.com/cakeshop/products.php?sort_by=product_price";
}
列表=新的ArrayList();
新建ItemList().execute();
返回v;
}
类ItemList扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(getActivity());
setMessage(“获取Cakelist…”);
progressDialog.setUndeterminate(false);
progressDialog.setCancelable(假);
progressDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…args){
String json=httpHandler.makeHttpRequest(url_products,“GET”);
Log.d(“响应:”,json);
if(json!=null){
试一试{
JSONObject JSONObject=新的JSONObject(json);
items=jsonObject.getJSONArray(标记产品);
对于(int i=0;i
下面是自定义ProductAdapter的代码,用于创建自定义列表,在此适配器中,我创建了一个新的内部GetImage AsyncTask类,用于从url下载图像

ProductAdapter类别:

public class ProductTabs extends Fragment {

    HttpHandler httpHandler = new HttpHandler();
    JSONArray items = null;
    ArrayList<HashMap<String,String>> list;
    ProgressDialog progressDialog = null;
    private static String url_products = "";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    private static String JSON_PRODUCT_ID = "product_id";
    private static String JSON_PRODUCT_NAME = "product_name";
    private static String JSON_PRODUCT_PRICE = "product_price";
    private static String JSON_PRODUCT_DESC = "product_desc";
    private static String JSON_PRODUCT_URL = "url";
    private static String JSON_PRODUCT_IMAGE = "product_image";

    ListView productList;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.product_tabs, container, false);
        productList = (ListView) v.findViewById(R.id.productList);

        if(this.getTag() == "Popular") {
            url_products = "http://kamalevent.com/cakeshop/products.php";
        } else {
            url_products = "http://kamalevent.com/cakeshop/products.php?sort_by=product_price";
        }

        list = new ArrayList<HashMap<String, String>>();

        new ItemList().execute();
        return v;
    }

    class ItemList extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Fetching Cakelist...");
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {

            String json = httpHandler.makeHttpRequest(url_products, "GET");
            Log.d("Response :", json);

            if(json != null) {
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    items = jsonObject.getJSONArray(TAG_PRODUCTS);

                    for(int i=0; i < items.length(); i++) {
                        JSONObject product = items.getJSONObject(i);

                        String id = product.getString(JSON_PRODUCT_ID);
                        String name = product.getString(JSON_PRODUCT_NAME);
                        String price = product.getString(JSON_PRODUCT_PRICE);
                        String desc = product.getString(JSON_PRODUCT_DESC);
                        String url = product.getString(JSON_PRODUCT_URL);

                        HashMap<String,String> products = new HashMap<String,String>();
                        products.put(JSON_PRODUCT_ID, id);
                        products.put(JSON_PRODUCT_NAME, name);
                        products.put(JSON_PRODUCT_DESC, desc);
                        products.put(JSON_PRODUCT_PRICE, price);
                        products.put(JSON_PRODUCT_URL, url);

                        list.add(products);

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            progressDialog.dismiss();

            ProductAdapter productAdapter = new ProductAdapter(getActivity(), R.layout.item_list, list);
            productList.setAdapter(productAdapter);
            productAdapter.notifyDataSetChanged();
        }
    }



}
public class ProductAdapter extends ArrayAdapter<HashMap<String, String>> {

    private ArrayList<HashMap<String,String>> products;
    private Context context;
    private View view;
    private int resource;
    private HashMap<String,String> hashMap;

    public ProductAdapter(Context context, int resource, ArrayList<HashMap<String, String>> products) {
        super(context, resource, products);
        this.context = context;
        this.resource = resource;
        this.products = products;
    }

    public class ValueHolder {
        TextView name, desc, price;
        ImageView image;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(resource, parent, false);

        ValueHolder valueHolder = new ValueHolder();
        valueHolder.name = (TextView) view.findViewById(R.id.item_title);
        valueHolder.desc = (TextView) view.findViewById(R.id.item_desc);
        valueHolder.price = (TextView) view.findViewById(R.id.item_price);
        valueHolder.image = (ImageView) view.findViewById(R.id.itemImage);

        hashMap = products.get(position);

        valueHolder.name.setText(hashMap.get("product_name"));
        valueHolder.desc.setText(hashMap.get("product_desc"));
        valueHolder.price.setText("Rs. " + hashMap.get("product_price"));
        if(valueHolder.image != null) {
            new GetImage(valueHolder.image).execute(hashMap.get("url"));
        }

        return view;
    }

    class GetImage extends AsyncTask<String, Void, Bitmap> {
        private final WeakReference<ImageView> imageViewWeakReference;

        public GetImage(ImageView imageView) {
            imageViewWeakReference = new WeakReference<ImageView>(imageView);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Bitmap doInBackground(String... args) {
            URL url = null;
            Bitmap image = null;

            String urlToImage = args[0];

            try {
                Log.d("Image :", urlToImage);
                url = new URL(urlToImage);
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return image;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(imageViewWeakReference != null) {
                ImageView imageView = imageViewWeakReference.get();
                if(imageView != null) {
                    if(bitmap != null) {
                        Log.d("Image :", "Image found");
                        imageView.setImageBitmap(bitmap);
                    }
                }
            }
        }
    }

}
公共类ProductAdapter扩展了ArrayAdapter{
私人ArrayList产品;
私人语境;
私人视野;
私有int资源;
私有HashMap;
公共产品适配器(上下文、int资源、ArrayList产品){
超级(上下文、资源、产品);
this.context=上下文;
这个资源=资源;
这一点。产品=产品;
}
公共类估价师{
文本视图名称、描述、价格;
图像视图图像;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater LayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
视图=layoutInflater.flate(资源、父项、false);
估价师估价师=新估价师();
valueHolder.name=(TextView)view.findViewById(R.id.item\u title);
valueHolder.desc=(TextView)view.findViewById(R.id.item_desc);
valueHolder.price=(TextView)view.findViewById(R.id.item_price);
valueHolder.image=(ImageView)view.findViewById(R.id.itemImage);
hashMap=products.get(位置);
valueHolder.name.setText(hashMap.get(“产品名称”);
valueHolder.desc.setText(hashMap.get(“产品描述”);
valueHolder.price.setText(“Rs.”+hashMap.get(“产品价格”);
if(valueHolder.image!=null){
新建GetImage(valueHolder.image).execute(hashMap.get(“url”);
}
复述