[英]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.