原理:
很多控件在装载数据时都需要一个Adapter对象,例如在使用Gallery控件时往往会编写一个ImageAdapter。该类时BaseAdapter的子类,在ImageAdapter类中通过getView方法返回显示图像的ImageView对象。
```
//建立一个URL对象,用于指定url
URL url = new URL("http://baidu.com");
URLConnection conn = url.openConnection();
conn.connect();//开始连接
InputStream is = conn.getInputStream();//获得网络资源的inputstream ;
```
获得了is之后,就可以根据实际的需要按文本或字节流来处理InputStream对象,从网络上获得数据后,可以将这些数据保存在数组或List对象中,然后的步骤就和处理本地数据完全一样。
例子:
1—将网络图像封装在ListView控件中
服务器环境配置
在网站根目录建立一个文件夹,apk,并创建一个list.txt,粘贴过来很多个png,list.txt内容如下:
calendar.png,多功能日历,5
zxyu.png,在线阅读软件,3.5
xxx
xxx
本例的核心是负责处理数据的ApkListAdapter类,该类是BaseAdapter的子类,在构造函数中,获得了List文件中的内容,并在分析文件的内容后将其保存在List< ImageData>中,其中ImageData是ApkListAdapter的内嵌类。
ApkListAdapter类的完整代码如下:
package net.blogjava.mobile;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RatingBar;
import android.widget.TextView;
public class Main extends ListActivity
{
public class ApkListAdapter extends BaseAdapter
{
private Context context;
private LayoutInflater layoutInflater;
private String inflater = Context.LAYOUT_INFLATER_SERVICE;
private String rootUrl = "http://192.168.17.156/apk/";
private String listUrl = rootUrl + "list.txt";
private List<ImageData> imageDataList = new ArrayList<ImageData>();
class ImageData
{
public String url;
public String applicationName;
public float rating;//图像文件的url,应用程序名,评价分数
}
private InputStream getNetInputStream(String urlStr)
{
try
{
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
return is;
}
catch (Exception e)
{
}
return null;
}
public ApkListAdapter(Context context)
{
this.context = context;
layoutInflater = (LayoutInflater) context
.getSystemService(inflater);
try
{
//获得与list.txt文件相连的InputStream对象
InputStream is = getNetInputStream(listUrl);
//必须使用GBK编码,因为list.txt文件使用了这样的编码方式
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String s = null;
//开始读取每一行of list.txt
while ((s = br.readLine()) != null)
{
String[] data = s.split(",");
if (data.length > 2)
{
ImageData imageData = new ImageData();
imageData.url = data[0];//设置图像的url
Log.d("aa", imageData.url);
imageData.applicationName = data[1];
imageData.rating = Float.parseFloat(data[2]);
imageDataList.add(imageData);//添加到list对象中
}
}
is.close();
}
catch (Exception e)
{
// TODO: handle exception
}
}
@Override
public int getCount()
{
return imageDataList.size();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(
R.layout.item, null);
ImageView ivLogo = (ImageView) linearLayout
.findViewById(R.id.ivLogo);
TextView tvApplicationName = ((TextView) linearLayout
.findViewById(R.id.tvApplicationName));
TextView tvRating = (TextView) linearLayout
.findViewById(R.id.tvRating);
RatingBar ratingBar = (RatingBar) linearLayout
.findViewById(R.id.ratingbar);
tvApplicationName
.setText(imageDataList.get(position).applicationName);
tvRating
.setText(String.valueOf(imageDataList.get(position).rating));
ratingBar.setRating(imageDataList.get(position).rating);
try
{
//从网络上下载相应的图像文件
InputStream is = getNetInputStream(rootUrl
+ imageDataList.get(position).url);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
ivLogo.setImageBitmap(bitmap);
}
catch (Exception e)
{
}
return linearLayout;
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ApkListAdapter apkListAdapter = new ApkListAdapter(this);
setListAdapter(apkListAdapter);
}
}
这里不仅有从网络上获取图片,也有获取文字,这两种方法值得考虑!