想要转换ArrayList<HashMap<String, Object>>串起来 [英] Want to convert ArrayList<HashMap<String, Object>> to string
问题描述
我阅读了 Universal Image Loader 和我制作具有 gridview 的应用程序,这个 gridview 从 json 获取图像.但是我的应用程序加载速度很慢,所以我想使用通用图像加载器,但是 getView
函数在 ImageAdapeter 类中的通用图像加载器中使用
I read the Universal Image Loader and I make application that has gridview and this gridview get image from json. but my application load so slow, so I want to use Universal Image Loader but getView
function in Universal Image Loader in ImageAdapeter class it use like that
imageLoader.displayImage(imageUrls[position], imageView, options);
或用于公式imageLoader.displayImage(String, imageView, options);
所以我没有字符串来完成这个公式.我只是可以创建 Object arr
来存储 Arraylist.
So I don't have a string to complete this formula. I just can create Object arr
to store Arraylist.
我如何将 ArrayList
转换为字符串或任何更改代码的方法?
How can I convert ArrayList<HashMap<String, Object>>
to string or any ways to change my code?
请尽可能确认或建议或推荐我.易于阅读我的代码
Please confirm or advice or recommend me as you can. easy to read my code
下面是我的 ImageAdapter.它工作正常,但速度很慢.
Below this is my ImageAdapter. it work fine but so slow.
public class ImageAdapter extends BaseAdapter {
private Context context;
private ArrayList<HashMap<String, Object>> MyArr = new ArrayList<HashMap<String, Object>>();
public ImageAdapter(Context c, ArrayList<HashMap<String, Object>> myArrList) {
context = c;
MyArr = myArrList;
}
public int getCount() {
return MyArr.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
}
viewHolder.categoryCard = (ImageView) convertView.findViewById(R.id.category_card);
//==================== change area
Object arr = new ArrayList<HashMap<String, Object>>(); // make objec arr to store arraylist
arr = MyArr.get(position).get("categoryid");
if (arr.equals("1")) {
viewHolder.categoryCard.setImageResource(R.drawable.card_eat);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
} else {
viewHolder.categoryCard.setImageResource(R.drawable.card_etc);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
}
// =============================
try {
viewHolder.imageView.setImageBitmap((Bitmap) MyArr.get(position).get("ImageThumBitmap"));
} catch (Exception e) {
viewHolder.imageView.setImageResource(android.R.drawable.ic_menu_report_image);
}
return convertView;
}
}
// Download JSON in Background
public class DownloadJSONFileAsync extends AsyncTask<String, Void, Void> {
String token = getIntent().getExtras().getString("token1");
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
}
@Override
protected Void doInBackground(String... params) {
String url = "http://xxx.xxx.xxx/card/all/20/0/?token="+token;
JSONArray data = null;
try {
JSONObject jsonObject = new JSONObject(getJSONUrl(url));
MyArrList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map;
data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject c = data.getJSONObject(i);
map = new HashMap<String, Object>();
// Thumbnail Get ImageBitmap To Object
map.put("cardimage", (String) c.getString("cardimage"));
map.put("ImageThumBitmap",(Bitmap) loadBitmap(c.getString("cardimage")));
map.put("categoryid", (String) c.getString("categoryid"));
MyArrList.add(map);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void unused) {
ShowAllContent(); // When Finish Show Content
dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
removeDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
}
}
这是来自 通用图片加载器
public class ImageAdapter extends BaseAdapter {
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
} else {
imageView = (ImageView) convertView;
}
// I want to do like this
imageLoader.displayImage(imageUrls[position], imageView, options);
return imageView;
}
}
推荐答案
如果你想保留 ArrayList
你必须创建一个新的 String[]
这样:
if you want to keep the ArrayList<HashMap<String, Object>>
you have to create a new String[]
this way:
String[] urls = new String[MyArrList.size()];
for(int i=0; i<MyArrList.size(); i++){
urls[i] = MyArrList.get(i).get("cardimage");
}
附注.我已经使用了您在代码中声明的变量名称 MyArrList,顺便说一句,以大写字母开头的变量名称不是一个好主意.
PS. I've used the variable name MyArrList as you declared in your code, by the way it's not a good idea to start a variable name with a capital letter.
PS2.我认为如果您想使用通用图像加载器,您可能不再需要将每个位图存储在 HashMap 中
PS2. I think that if you want to use the Universal Image Loader you'll maybe no longer need to store each Bitmap in the HashMap
这篇关于想要转换ArrayList<HashMap<String, Object>>串起来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!