Sí claro. No lo he puesto antes por si nadie me contestaba o se asustaba de ver tanto código.
Ya he conseguido que no se me bloquee la aplicación, pero sigo sin poder visualizar mi lista de imágenes de la aplicación...
A ver, pongo por trozos.
Esta es la parte del main.java
Código java:
Ver originalpackage com.example.aplicacionimagen;
import android.app.Activity;
import android.os.Bundle;
import java.util.ArrayList;
import android.view.Menu;
import android.widget.ListView;
public class Tercero extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tercero);
ArrayList<Imagen> imagesAvaiable = new ArrayList<Imagen>();
//MI HILO SECUNDARIO
MiThread hilo= new MiThread(imagesAvaiable);
hilo.start();
// Creamos el objeto AdapterImage y lo asignamos al ListView
Adapterimagen adapterimagen = new Adapterimagen(this, imagesAvaiable);
lvimages.setAdapter(adapterimagen);
}
@Override
public boolean onCreateOptionsMenu
(Menu menu
) { getMenuInflater().inflate(R.menu.tercero, menu);
return true;
}
}
He puesto un hilo secundario para que no se me bloqueara la aplicación:
Código java:
Ver originalpackage com.example.aplicacionimagen;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.util.Log;
class MiThread
extends Thread {
private ArrayList<Imagen> imagesAvaiable;
public MiThread(ArrayList<Imagen> imagesAvaiable2)
{
this.imagesAvaiable= imagesAvaiable2;
}
@Override
public void run() {
try
{
// Llamamos al servicio web para recuperar los datos
HttpGet httpGet = new HttpGet("http://URL/write.php");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse)httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
BufferedHttpEntity buffer = new BufferedHttpEntity(entity);
//StringBuilder total = new StringBuilder();
while ((line = r.readLine()) != null) {
aux += line;
}
// Parseamos la respuesta obtenida del servidor a un objeto JSON
JSONObject jsonObject = new JSONObject(aux);
JSONArray images = jsonObject.getJSONArray("images");
// Recorremos el array con los elementos images
for(int i = 0; i < images.length(); i++) {
JSONObject ima = images.getJSONObject(i);
// Creamos el objeto Imagen
Imagen c = new Imagen(ima.getInt("id"), ima.getString("ruta"));
c.setData(ima.getString("photo"));
// Almacenamos el objeto en el array que hemos creado anteriormente
imagesAvaiable.add(c);
}
}
{
Log.e("WebService", e.getMessage());
}
}
}
La implementación de mi clase imagen:
Código java:
Ver originalpackage com.example.aplicacionimagen;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
public class Imagen {
protected long id;
protected Bitmap photo;
public Imagen
(long id,
String ruta
) { this.id = id;
this.ruta=ruta;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
return ruta;
}
public void setruta
(String ruta
) { this.ruta = ruta;
}
return data;
}
public void setData
(String data
) { this.data = data;
try {
byte[] byteData = Base64.decode(data, Base64.DEFAULT);
this.photo = BitmapFactory.decodeByteArray( byteData, 0, byteData.length);
}
e.printStackTrace();
}
}
public Bitmap getPhoto() {
return photo;
}
}
He creado otra clase llamada AdapterImage para hacer de "adapter" con la ListView:
Código java:
Ver originalpackage com.example.aplicacionimagen;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class Adapterimagen extends BaseAdapter {
protected Activity activity;
protected ArrayList<Imagen> items;
public Adapterimagen(Activity activity, ArrayList<Imagen> items) {
this.activity = activity;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem
(int position
) { return items.get(position);
}
@Override
public long getItemId(int position) {
return items.get(position).getId();
}
@Override
public View getView
(int position,
View convertView, ViewGroup parent
) {
if(convertView == null) {
LayoutInflater inflater
= (LayoutInflater
) activity.
getSystemService(Context.
LAYOUT_INFLATER_SERVICE); vi = inflater.inflate(R.layout.list_item_layout, null);
}
Imagen im = items.get(position);
ImageView image = (ImageView) vi.findViewById(R.id.imageView2);
image.setImageBitmap(im.getPhoto());
TextView ruta = (TextView) vi.findViewById(R.id.imageName);
ruta.setText(im.getruta());
return vi;
}
}
Y el código en PHP:
Código PHP:
Ver original<?php
$images['images'] = array();
if( $con )
{
$res = mysql_query('select id, ruta, photo from images');
}
}
header('Content-type: application/json');
?>
PD: En el fichero PHP he editado el código para no mostrar el usuario ni la contraseña del servidor.