繁体   English   中英

从PHP到Android的图片库

[英]Images gallery from PHP to Android

我正在尝试制作从PHP服务器获取的图像库,以显示在我的Android应用程序中。

我创建了一个listView来通过位图显示所有图像,我还创建了一个带有相应适配器的“ image”类来转换图像。 我使用JSON作为PHP和android之间信息交换的标识符。 通过这种方式,我可以在base64 Web服务中检索图像,然后将数据解码并转换为存储在应用程序属性中的位图(此外,我还有相应的文件“ images.php”,该文件可让我访问这些图像)。

我的问题是该应用程序根本不显示任何内容,因此我不知道这是否是我的代码问题,或者您应该尝试另一种方法来获取图库显示服务器拍照。

这是我的代码:

MainActivity.java

package com.example.servidorphpuca;
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 {

    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_tercero);

          ListView lvImages = (ListView) findViewById(R.id.lv_images);
          ArrayList<Imagen> imagesAvaiable = new ArrayList<Imagen>();

          //MY SECUNDARY THREAD
          MiThread hilo= new MiThread(imagesAvaiable);
          hilo.start();

          // create the object Adapterimagen and assign it to the ListView 
          Adapterimagen imageAdapter = new Adapterimagen(this, imagesAvaiable);
          lvImages.setAdapter(imageAdapter);
        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.tercero, menu);
        return true;
    }

}

我放置了一个辅助线程以不使应用程序过载:

    package com.example.servidorphpuca;

    import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; //import java.net.URL; 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;    

    class MiThread extends Thread {
        private ArrayList<Imagen> imagesAvaiable;

        public MiThread(ArrayList<Imagen> imagesAvaiable2) {        this.imagesAvaiable= imagesAvaiable2;       }


           @Override

           public void run() {  


               try {
                    HttpGet httpGet = new HttpGet("http://www.webcompany.es/uca/images.php");
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpResponse response = (HttpResponse)httpClient.execute(httpGet);
                    HttpEntity entity = response.getEntity();
                    BufferedHttpEntity buffer = new BufferedHttpEntity(entity);
                    InputStream iStream = buffer.getContent();

                    String aux = "";

                    BufferedReader r = new BufferedReader(new InputStreamReader(iStream));
                    String line;
                    while ((line = r.readLine()) != null) {
                      aux += line;
                    }

                    // Parser the response obtained from the server to a JSON object
                    JSONObject jsonObject = new JSONObject(aux);
                    JSONArray images = jsonObject.getJSONArray("images");

                    // travel the array with images elements
                    for(int i = 0; i < images.length(); i++) {
                      JSONObject img1 = images.getJSONObject(i);

                      // created the object image
                      Imagen c = new Imagen(img1.getInt("clave_id"));
                      c.setData(img1.getString("ruta_imagen"));

                      // store the object in the array we created above
                      imagesAvaiable.add(c);
                    }
               }
               catch(Exception e) 
               {
                    Log.e("WebService", e.getMessage());
               }
                    }

    }

我的图片类:

package com.example.servidorphpuca;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;

public class Imagen {
  protected long clave_id;
  protected String data;
  protected Bitmap ruta_imagen;

  public Imagen(long clave_id) {
    this.clave_id = clave_id;
  }

  public long getId() {
    return clave_id;
  }

  public void setId(int clave_id) {
    this.clave_id = clave_id;
  }

  public String getData() {
    return data;
  }

  public void setData(String data) {
    this.data = data;
    try {   
      byte[] byteData = Base64.decode(data, Base64.DEFAULT);
      this.ruta_imagen = BitmapFactory.decodeByteArray( byteData, 0, byteData.length);
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  public Bitmap getPhoto() {
    return ruta_imagen;
  }
}

我创建了另一个名为AdapterImage的类,以使“适配器”适应ListView:

package com.example.servidorphpuca;

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;

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) {
        View vi=convertView;

        if(convertView == null) {
          LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          vi = inflater.inflate(R.layout.list_item_layout, null);
        }

        Imagen img1 = items.get(position);

        ImageView image = (ImageView) vi.findViewById(R.id.imagenImage);
        image.setImageBitmap(img1.getPhoto());

        return vi;
      }
    }

和PHP代码:

    <?php  

$con = mysqli_connect('-----------', '-------', '--------', '-------');  
mysql_query("SET CHARACTER SET utf8");  
mysql_query("SET NAMES utf8");  

$images['images'] = array();

if( $con )  
{  
  mysql_select_db('images');  

  $res = mysql_query('select clave_id, ruta_imagen from images');

  while( $row = mysql_fetch_array($res) ) {
    array_push($images['images'], array('clave_id' => $row['clave_id'], 'ruta_imagen' => base64_encode($row['ruta_imagen'])));
  }
  mysql_free_result($res);
  mysql_close($con);
}

header('Content-type: application/json');
echo json_encode($images);


?>

我发现了很多教程如何使用单个图像(甚至是内存或SD卡)来完成此操作,但是问题是我想使用服务器中的一组图像(没有固定数量的图像)。

将图像的热链接放在服务器的JSON中,并在应用程序端使用必要的代码解析JSON,然后通过Univeral Image Loader将图像加载到listview中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM