可装载网络数据的控件

来源:互联网 发布:淘宝触屏版 编辑:程序博客网 时间:2024/06/07 21:08

原理:
很多控件在装载数据时都需要一个Adapter对象,例如在使用Gallery控件时往往会编写一个ImageAdapter。该类时BaseAdapter的子类,在ImageAdapter类中通过getView方法返回显示图像的ImageView对象。

```//建立一个URL对象,用于指定urlURL 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);    }}

这里不仅有从网络上获取图片,也有获取文字,这两种方法值得考虑!

2-上传文件
http://download.csdn.net/detail/chengyangyy/8824475

0 0