Java 如何在android的自定义列表适配器中显示来自服务器的带有标题和说明的图像
我正在使用PHP和Mysql创建一个应用程序,它在标签片段中显示带有图像、标题、描述和价格的自定义列表视图 为了实现这一点,我使用itemlistasynctask内部类创建了一个ProductTabs类,该类用于获取除图像下载之外的项目详细信息 产品选项卡类别: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
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”);
}
复述