|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Imagenes
Veran tengo un problema con las imagenes, cuando habro el activiti todo se ve perfectamente, pero las imagenes que estan por debajo de la pantalla, osea las que en un principio estan al final de la lista, al mover la lista hacia arriba salen cambiandose unas entre otras, y al volver a desplazar al principio de la lista tambien, las que no se ven, tambien, no se si me explico. Es como si volviera a recorrer el Json buscando la correcta. A que puede ser debido.
Código:
public class Frag_J_Actual extends Fragment { ArrayList<Estadisticas> estadisticasArrayList; Estadisticas_Adapter adapter; @override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); View view = inflater.inflate(R.layout.j_actual_list, null); estadisticasArrayList = new ArrayList<Estadisticas>(); new JSONAsyncTask().execute("http://cadetes.esy.es/15/jornada_actual.php"); ListView listView = (ListView) view.findViewById(android.R.id.list); adapter = new Estadisticas_Adapter(getActivity(), R.layout.j_actual_row, estadisticasArrayList); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { Toast.makeText(getActivity(), estadisticasArrayList.get(position).getFecha(), Toast.LENGTH_LONG).show(); } }); return view; } class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { ProgressDialog dialog; @override protected void onPreExecute() { super.onPreExecute(); dialog = new ProgressDialog(Frag_J_Actual.this.getActivity()); dialog.setMessage("Cargando, por favor espere"); dialog.setTitle("Conectando con el servidor"); dialog.show(); dialog.setCancelable(false); } @override protected Boolean doInBackground(String... urls) { try { HttpGet httppost = new HttpGet(urls[0]); HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(httppost); int status = response.getStatusLine().getStatusCode(); if (status == 200) { HttpEntity entity = response.getEntity(); String data = EntityUtils.toString(entity); JSONObject jsono = new JSONObject(data); JSONArray jarray = jsono.getJSONArray("jornada"); for (int i = 0; i < jarray.length(); i++) { JSONObject object = jarray.getJSONObject(i); Estadisticas J_Actual = new Estadisticas(); J_Actual.setNombre_Local(object.getString("nomLocal")); J_Actual.setResult_Local(object.getString("resulLocal")+" - "+(object.getString("resulVisitante"))); J_Actual.setNombre_Visi(object.getString("nomVisitante")); J_Actual.setFecha(object.getString("fecha")); J_Actual.setHora(object.getString("hora")); J_Actual.setEstado_Partido(object.getString("estadoPartido")); //J_Actual.setResult_Visitante(object.getString("resulVisitante")); J_Actual.setEscudo_local("http://ffcv.es/ncompeticiones/" + (object.getString("escudoLocal"))); J_Actual.setImage2("http://ffcv.es/ncompeticiones/" + (object.getString("escudoVisitante"))); estadisticasArrayList.add(J_Actual); } return true; } } catch (ParseException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return false; } protected void onPostExecute(Boolean result) { dialog.cancel(); adapter.notifyDataSetChanged(); if(result == false) Toast.makeText(getActivity(), "Se ha podido obtener los datos desde el servidor", Toast.LENGTH_LONG).show(); } } } Código:
public class J_Actual extends Fragment { ListView listView; ArrayAdapter adapter; @override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_volley, container, false); } @override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } Última edición por Merche300 Día 17/01/16 a las 11:06:24. |
|
#2
|
||||
|
||||
El Estadisticas_Adapter no lo pones, pero me lo puedo imaginar. Y lo que te ocurre es debido a que no usas bien el Reciclado de Vista que Android aplica a los listados. Resumiendo mucho:
Si en un listado ves 6 elementos completos en tu dispositivo, el sistema reserva espacio para 7 elementos, de tal forma que el 1 y el 8 son el mismo, el 2 y el 9 también, y así sucesivamente. Cuando mueves el listado verás que la imagen del 1 y el 8 son la misma, y en ese momento, cuando la 8 ya es visible comienzas la descarga de su imagen y la asignas, pasando el tiempo que tarde el sistema en iniciar la descarga y asignarla. ¿Cómo se soluciona? Usando una librería de cacheo de imágenes, que entre otras cosas aplica una imagen por defecto mientras descarga la imagen correspondiente. Así mientras descarga la imagen 8 por primera vez no verás la 1, sino que verás una imagen de "Cargando" o el logo de tu aplicación, eso ya al gusto. Librerías de cacheo de imágenes hay muchas, yo uso la propia que trae Volley, así de paso quitas el HttpClient, que lleva deprecated casi desde que salió Android. |
Gracias de parte de: | ||
#3
|
||||
|
||||
A ver si he acertado, no creo ya que con esto tambien me lo hace:
Código:
holder.escudo_local.setImageResource(R.mipmap.ic_launcher); new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local()); new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante()); Código:
public class Estadisticas_Adapter extends ArrayAdapter<Estadisticas> { ArrayList<Estadisticas> Estadisticas_List; LayoutInflater vi; int Resource; ViewHolder holder; public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) { super(context, resource, objects); vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); Resource = resource; Estadisticas_List = objects; } @override public View getView(int position, View convertView, ViewGroup parent) { // convert view = design View v = convertView; if (v == null) { holder = new ViewHolder(); v = vi.inflate(Resource, null); holder.escudo_local = (ImageView) v.findViewById(R.id.tv_esc_local); holder.escudo_visi = (ImageView) v.findViewById(R.id.tv_esc_visi); holder.tv_Nombre = (TextView) v.findViewById(R.id.tv_Equipo_Local); holder.tv_Nombre_Local = (TextView) v.findViewById(R.id.tv_Equipo_Local); holder.tv_Nombre_Visi = (TextView) v.findViewById(R.id.tv_Equipo_Visi); holder.tvNombre_Arbitro = (TextView) v.findViewById(R.id.tv_Nombre_Arbitro); holder.tv_Fecha = (TextView) v.findViewById(R.id.tv_Fecha); holder.tv_Hora = (TextView) v.findViewById(R.id.tv_Hora); holder.tv_Result_Local = (TextView) v.findViewById(R.id.tv_Result_Local); holder.tv_Result_Visitante = (TextView) v.findViewById(R.id.tv_Result_Visitante); holder.tv_Targeta = (TextView) v.findViewById(R.id.tv_targeta); holder.tv_Tar_Minuto = (TextView) v.findViewById(R.id.tv_tar_minuto); holder.tv_Gol_Minuto = (TextView) v.findViewById(R.id.tv_gol_minuto); holder.tv_Nombre_Entra = (TextView) v.findViewById(R.id.tv_nombre_entra); holder.tv_Dorsal_Entra = (TextView) v.findViewById(R.id.tv_dorsal_entra); holder.tv_Nombre_Sale = (TextView) v.findViewById(R.id.tv_nombre_sale); holder.tv_Dorsal_Sale = (TextView) v.findViewById(R.id.tv_dorsal_sale); holder.tv_Cambio_Min = (TextView) v.findViewById(R.id.tv_cambio_min); holder.tv_Estado_Partido = (TextView) v.findViewById(R.id.tv_Estado_Partido); holder.tv_Num_Goles = (TextView) v.findViewById(R.id.tv_Num_Goles); v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); } holder.escudo_local.setImageResource(R.mipmap.ic_launcher); new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local()); new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante()); //holder.tvNombre_Arbitro.setText(Estadisticas_List.get(position).getNombre_Arbitro()); holder.tv_Nombre.setText(Estadisticas_List.get(position).getNombre()); holder.tv_Nombre_Local.setText(Estadisticas_List.get(position).getNombre_Local()); holder.tv_Nombre_Visi.setText(Estadisticas_List.get(position).getNombre_Visi()); holder.tv_Fecha.setText("Fecha: "+Estadisticas_List.get(position).getFecha()); holder.tv_Hora.setText("Hora: "+Estadisticas_List.get(position).getHora()); holder.tv_Result_Local.setText(Estadisticas_List.get(position).getResult_Local()); holder.tv_Result_Visitante.setText(Estadisticas_List.get(position).getResult_Visitante()); //holder.tv_Targeta.setText("targeta: " + Estadisticas_List.get(position).getTargeta()); //holder.tv_Tar_Minuto.setText("Targetamin: " + Estadisticas_List.get(position).getTarMinuto()); //holder.tv_Gol_Minuto.setText("golmin: " + Estadisticas_List.get(position).getGol_Min()); //holder.tv_Nombre_Entra.setText("Nombreentra: " + Estadisticas_List.get(position).getNombre_Entra()); //holder.tv_Dorsal_Entra.setText("dorsalentra: " + Estadisticas_List.get(position).getDorsal_Entra()); //holder.tv_Nombre_Sale.setText("Nombreentrasale: " + Estadisticas_List.get(position).getNombre_Sale()); //holder.tv_Dorsal_Sale.setText("dorsalsale: " + Estadisticas_List.get(position).getDorsal_Sale()); //holder.tv_Cambio_Min.setText("cambiomin: " + Estadisticas_List.get(position).getCambio_Min()); holder.tv_Estado_Partido.setText(Estadisticas_List.get(position).getEstado_Partido()); //holder.tv_Num_Goles.setText(Estadisticas_List.get(position).getNum_Goles()); return v; } static class ViewHolder { public TextView tv_Nombre; public TextView tv_Nombre_Local; public TextView tv_Result_Local; public TextView tv_Result_Visitante; public TextView tvNombre_Arbitro; public TextView tv_Fecha; public TextView tv_Hora; public TextView tv_Nombre_Visi; public TextView tv_Targeta; public TextView tv_Tar_Minuto; public TextView tv_Gol_Minuto; public TextView tv_Nombre_Entra; public TextView tv_Dorsal_Entra; public TextView tv_Nombre_Sale; public TextView tv_Dorsal_Sale; public TextView tv_Cambio_Min; public TextView tv_Estado_Partido; public TextView tv_Num_Goles; public ImageView escudo_local; public ImageView escudo_visi; } private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } } |
#4
|
||||
|
||||
Si solo estas utilizando la AsyncTask para descargar las imagenes, te recomiendo muchisimo que te mires una libreria como Picasso:
http://square.github.io/picasso
__________________
|
Gracias de parte de: | ||
#5
|
||||
|
||||
Si solo estas utilizando la AsyncTask para descargar las imagenes, te recomiendo muchisimo que te mires una libreria como Picasso:
http://square.github.io/picasso ![]() java.lang.IllegalArgumentException: Context must not be null. Código:
Picasso.with(context) .load(Estadisticas_List.get(position).getEscudo_local()) .placeholder(R.drawable.ic_contact_icon) .into(holder.escudo_local); Código:
public class Estadisticas_Adapter extends ArrayAdapter<Estadisticas> { Context context; ArrayList<Estadisticas> Estadisticas_List; LayoutInflater vi; int Resource; ViewHolder holder; public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) { super(context, resource, objects); vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); Resource = resource; Estadisticas_List = objects; } @override public View getView(int position, View convertView, ViewGroup parent) { // convert view = design View v = convertView; if (v == null) { holder = new ViewHolder(); v = vi.inflate(Resource, null); holder.escudo_local = (ImageView) v.findViewById(R.id.tv_esc_local); holder.escudo_visi = (ImageView) v.findViewById(R.id.tv_esc_visi); holder.tv_Nombre = (TextView) v.findViewById(R.id.tv_Equipo_Local); holder.tv_Nombre_Local = (TextView) v.findViewById(R.id.tv_Equipo_Local); holder.tv_Nombre_Visi = (TextView) v.findViewById(R.id.tv_Equipo_Visi); //holder.tvNombre_Arbitro = (TextView) v.findViewById(R.id.tv_Nombre_Arbitro); holder.tv_Fecha = (TextView) v.findViewById(R.id.tv_Fecha); holder.tv_Hora = (TextView) v.findViewById(R.id.tv_Hora); holder.tv_Result_Local = (TextView) v.findViewById(R.id.tv_Result_Local); holder.tv_Result_Visitante = (TextView) v.findViewById(R.id.tv_Result_Visitante); /*holder.tv_Targeta = (TextView) v.findViewById(R.id.tv_targeta); holder.tv_Tar_Minuto = (TextView) v.findViewById(R.id.tv_tar_minuto); holder.tv_Gol_Minuto = (TextView) v.findViewById(R.id.tv_gol_minuto); holder.tv_Nombre_Entra = (TextView) v.findViewById(R.id.tv_nombre_entra); holder.tv_Dorsal_Entra = (TextView) v.findViewById(R.id.tv_dorsal_entra); holder.tv_Nombre_Sale = (TextView) v.findViewById(R.id.tv_nombre_sale); holder.tv_Dorsal_Sale = (TextView) v.findViewById(R.id.tv_dorsal_sale); holder.tv_Cambio_Min = (TextView) v.findViewById(R.id.tv_cambio_min);*/ holder.tv_Estado_Partido = (TextView) v.findViewById(R.id.tv_Estado_Partido); //holder.tv_Num_Goles = (TextView) v.findViewById(R.id.tv_Num_Goles); v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); } Picasso.with(context) .load(Estadisticas_List.get(position).getEscudo_local()) .placeholder(R.drawable.ic_contact_icon) .into(holder.escudo_local); //holder.escudo_local.setImageResource(R.mipmap.ic_launcher); holder.escudo_visi.setImageResource(R.mipmap.ic_launcher); //new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local()); new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante()); //holder.tvNombre_Arbitro.setText(Estadisticas_List.get(position).getNombre_Arbitro()); holder.tv_Nombre.setText(Estadisticas_List.get(position).getNombre()); holder.tv_Nombre_Local.setText(Estadisticas_List.get(position).getNombre_Local()); holder.tv_Nombre_Visi.setText(Estadisticas_List.get(position).getNombre_Visi()); holder.tv_Fecha.setText("Fecha: "+Estadisticas_List.get(position).getFecha()); holder.tv_Hora.setText("Hora: "+Estadisticas_List.get(position).getHora()); holder.tv_Result_Local.setText(Estadisticas_List.get(position).getResult_Local()); holder.tv_Result_Visitante.setText(Estadisticas_List.get(position).getResult_Visitante()); //holder.tv_Targeta.setText("targeta: " + Estadisticas_List.get(position).getTargeta()); //holder.tv_Tar_Minuto.setText("Targetamin: " + Estadisticas_List.get(position).getTarMinuto()); //holder.tv_Gol_Minuto.setText("golmin: " + Estadisticas_List.get(position).getGol_Min()); //holder.tv_Nombre_Entra.setText("Nombreentra: " + Estadisticas_List.get(position).getNombre_Entra()); //holder.tv_Dorsal_Entra.setText("dorsalentra: " + Estadisticas_List.get(position).getDorsal_Entra()); //holder.tv_Nombre_Sale.setText("Nombreentrasale: " + Estadisticas_List.get(position).getNombre_Sale()); //holder.tv_Dorsal_Sale.setText("dorsalsale: " + Estadisticas_List.get(position).getDorsal_Sale()); //holder.tv_Cambio_Min.setText("cambiomin: " + Estadisticas_List.get(position).getCambio_Min()); holder.tv_Estado_Partido.setText(Estadisticas_List.get(position).getEstado_Partido()); //holder.tv_Num_Goles.setText(Estadisticas_List.get(position).getNum_Goles()); return v; } static class ViewHolder { public TextView tv_Nombre; public TextView tv_Nombre_Local; public TextView tv_Result_Local; public TextView tv_Result_Visitante; public TextView tvNombre_Arbitro; public TextView tv_Fecha; public TextView tv_Hora; public TextView tv_Nombre_Visi; public TextView tv_Targeta; public TextView tv_Tar_Minuto; public TextView tv_Gol_Minuto; public TextView tv_Nombre_Entra; public TextView tv_Dorsal_Entra; public TextView tv_Nombre_Sale; public TextView tv_Dorsal_Sale; public TextView tv_Cambio_Min; public TextView tv_Estado_Partido; public TextView tv_Num_Goles; public ImageView escudo_local; public ImageView escudo_visi; } private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } } Última edición por Merche300 Día 17/01/16 a las 01:05:09. |
#6
|
||||
|
||||
La propia excepción te está diciendo que el Context con el que estás intentando utilizar Picasso es null.
Fíjate que en el constructor de tu adapter no te estás guardando la referencia al Context, por tanto cuando le pasas context, este es null.
__________________
|
Gracias de parte de: | ||
#7
|
||||
|
||||
Supongo que te refieres a esto, va perfecto.
Código:
public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) { super(context, resource, objects); vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); Resource = resource; Estadisticas_List = objects; this.context = context; } |
#9
|
||||
|
||||
Por supuesto, ahora voy a hacerla toda con Volley + Picasso, ya tengo un par de fines de semana ocupado.
|
Gracias de parte de: | ||
![]() |
![]() |
||||||
|
Herramientas | |