我希望你能帮助我这个错误,我被困在这几天。 我想显示URL一个ImageView的使用SimpleAdapter一个ListView,但图像都显示为白色。
我最近开始与Android,所以,我无法理解了很多关于LazyList和其他的东西..
我怎么能执行我的代码的URL与ImageView的工作? 这是我的AsyncTask来完成所有的工作。
class LoadAllProducts extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ListAlojamientoFragment.this.getActivity());
pDialog.setMessage("Cargando Alojamientos... Espere por favor.");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
// Creando parametros
List<NameValuePair> params = new ArrayList<NameValuePair>();
// Obteniendo JSON string desde url
JSONObject json = jParser.makeHttpRequest(url_json, "GET", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
alojamiento = json.getJSONArray(TAG_ALOJAMIENTO);
for (int i = 0; i < alojamiento.length(); i++) {
JSONObject c = alojamiento.getJSONObject(i);
String idAlojamiento = c.getString(TAG_ID);
String nombre = c.getString(TAG_NOMBRE);
String comuna = c.getString(TAG_COMUNA);
String fechaIngreso = c.getString(TAG_FECHA);
//Img example
String urlImg = "http://www.markpascua.com/wp-content/android.jpg";
//AQuery Library
aq.id(imageView).image(urlImg, true, true, 1, R.drawable.hotel2_1);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_IMAGE, urlImg);
map.put(TAG_ID, idAlojamiento);
map.put(TAG_NOMBRE, nombre);
map.put(TAG_FECHA, fechaIngreso);
productsList.add(map);
}
} else {
//
}
} catch (JSONException e) {
pDialog.dismiss();
e.printStackTrace();
} catch (NullPointerException e){
pDialog.dismiss();
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
getActivity().runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
ListAlojamientoFragment.this.getActivity(), productsList,
R.layout.lista_items, new String[]{TAG_IMAGE, TAG_NOMBRE,
TAG_FECHA, TAG_ID},
new int[]{R.id.img_row, R.id.idAlojamiento, R.id.nombre, R.id.idAlojamientoDetalle});
setListAdapter(adapter);
}
});
}
}
- - - - -[编辑] - - - - -
最近,我解决了这个问题,如果任何人有同样的问题,这里是从网址下载图像ListView控件的代码。
AsynTask下载JSON。
class getAllHouses extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ListAlojamientoFragment.this.getActivity());
pDialog.setMessage("Loading... please wait a second.");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(URL_ALL_HOUSES, "GET", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
alojamiento = json.getJSONArray(TAG_ALOJAMIENTO);
for (int i = 0; i < alojamiento.length(); i++) {
JSONObject c = alojamiento.getJSONObject(i);
String idAlojamiento = c.getString(TAG_ID);
String nombre = c.getString(TAG_NOMBRE);
String comuna = c.getString(TAG_COMUNA);
String fechaIngreso = c.getString(TAG_FECHA);
latitud = c.getString(TAG_LATITUD);
longitud = c.getString(TAG_LONGITUD);
//URL image download
String urlImg = "http://es.opendomo.org/files/android-logo.png";
//String
flag = urlImg;
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("flag", R.drawable.blank);
map.put("flag_path", flag);
map.put(TAG_ID, idAlojamiento);
map.put(TAG_NOMBRE, nombre);
map.put(TAG_FECHA, fechaIngreso);
map.put(TAG_LATITUD, latitud);
map.put(TAG_LONGITUD, longitud);
productsList.add(map);
}
} else {
//
}
} catch (JSONException e) {
pDialog.dismiss();
e.printStackTrace();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("¡Error!");
alert.setMessage("No connections are available");
alert.setCancelable(false);
alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alert.create().show();
}
});
} catch (NullPointerException e){
pDialog.dismiss();
e.printStackTrace();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("¡Error!");
alert.setMessage("No connections are available");
alert.setCancelable(false);
alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alert.create().show();
}
});
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
getActivity().runOnUiThread(new Runnable() {
public void run() {
SimpleAdapter adapter = new SimpleAdapter(
ListAlojamientoFragment.this.getActivity(), productsList,
R.layout.lista_items, new String[]{"flag", TAG_NOMBRE,
TAG_FECHA, TAG_ID, TAG_LATITUD, TAG_LONGITUD},
new int[]{R.id.img_row, R.id.idAlojamiento, R.id.nombre, R.id.idAlojamientoDetalle, R.id.id_latitud, R.id.id_longitud});
mListView.setAdapter(adapter);
for(int i=0;i<adapter.getCount();i++) {
HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);
String imgUrl = (String) hm.get("flag_path");
ImageLoaderTask imageLoaderTask = new ImageLoaderTask();
HashMap<String, Object> hmDownload = new HashMap<String, Object>();
hm.put("flag_path", imgUrl);
hm.put("position", i);
// Starting ImageLoaderTask to download and populate image in the listview
imageLoaderTask.execute(hm);
}
}
});
}
}
AsynTask将图像下载到的ListView异步..
private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>{
@Override
protected HashMap<String, Object> doInBackground(HashMap<String, Object>... hm) {
InputStream iStream= null;
String imgUrl = (String) hm[0].get("flag_path");
int position = (Integer) hm[0].get("position");
URL url;
try {
url = new URL(imgUrl);
// Creating an http connection to communicate with url
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// Connecting to url
urlConnection.connect();
// Reading data from url
iStream = urlConnection.getInputStream();
// Getting Caching directory
File cacheDirectory = getActivity().getBaseContext().getCacheDir();
// Temporary file to store the downloaded image
File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+position+".png");
// The FileOutputStream to the temporary file
FileOutputStream fOutStream = new FileOutputStream(tmpFile);
// Creating a bitmap from the downloaded inputstream
Bitmap b = BitmapFactory.decodeStream(iStream);
// Writing the bitmap to the temporary file as png or jpeg file
b.compress(Bitmap.CompressFormat.JPEG,10, fOutStream);
// Flush the FileOutputStream
fOutStream.flush();
//Close the FileOutputStream
fOutStream.close();
// Create a hashmap object to store image path and its position in the listview
HashMap<String, Object> hmBitmap = new HashMap<String, Object>();
// Storing the path to the temporary image file
hmBitmap.put("flag", tmpFile.getPath());
// Storing the position of the image in the listview
hmBitmap.put("position", position);
// Returning the HashMap object containing the image path and position
return hmBitmap;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(HashMap<String, Object> result) {
// Getting the path to the downloaded image
String path = (String) result.get("flag");
// Getting the position of the downloaded image
int position = (Integer) result.get("position");
// Getting adapter of the listview
SimpleAdapter adapter = (SimpleAdapter ) mListView.getAdapter();
// Getting the hashmap object at the specified position of the listview
HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(position);
// Overwriting the existing path in the adapter
hm.put("flag", path);
// Noticing listview about the dataset changes
adapter.notifyDataSetChanged();
}
}