首页 技术 正文
技术 2022年11月20日
0 收藏 776 点赞 4,188 浏览 8884 个字

例子中用于解析Json的Gson请自己Google下载

主Activity:

package COM.Example.Main;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import COM.Example.Main.R;import COM.Example.Main.stringGetJson.User;import android.app.Activity;import android.app.ListActivity;import android.os.AsyncTask;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;public class stringListActivity extends ListActivity {    private MyAdapter mMyAdapter;    private LinkedList<User> users = null;    // 当前Activity中的ListView    ListView listView = null;    int lastItem = 0;    LinearLayout loadingLayout = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.foodlistactivity);        listView = getListView();        setLoadingLayout();        new readTask().execute(null);    }    private final class MyAdapter extends ArrayAdapter<User> {        public MyAdapter(Activity activity, List<User> newsList) {            super(activity, 0, newsList);        }        private Map<Integer, View> viewMap = new HashMap<Integer, View>();        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder;            View rowView = this.viewMap.get(position);            if (rowView == null) {                User user = users.get(position);                LayoutInflater inflater = ((Activity) this.getContext())                        .getLayoutInflater();                holder = new ViewHolder();                rowView = inflater                        .inflate(R.layout.foodlistactivity_item, null);                holder.mNameText = (TextView) rowView                        .findViewById(R.id.foodItemUsername);                holder.mPhoto = (ImageView) rowView                        .findViewById(R.id.foodItemPic);                rowView.setTag(holder);                holder.mNameText.setText(user.Name);                if (!holder.mPhoto.isDrawingCacheEnabled()) {                    holder.mPhoto.setTag(user.Pic);                    new downImageTask().execute(holder.mPhoto);                    holder.mPhoto.setDrawingCacheEnabled(true);                }                viewMap.put(position, rowView);            } else {                holder = (ViewHolder) rowView.getTag();            }            return rowView;        }        public class ViewHolder {            public TextView mNameText;            public ImageView mPhoto;        }    }    public void setLoadingLayout() {        LinearLayout layout = new LinearLayout(this);        layout.setOrientation(LinearLayout.HORIZONTAL);        ProgressBar progressBar = new ProgressBar(this);
        progressBar.setPadding(0, 0, 15, 0);
        layout.addView(progressBar);
        TextView textView = new TextView(this);
        textView.setText("加载中...");
        textView.setGravity(Gravity.CENTER_VERTICAL);
        layout.addView(textView);
        layout.setGravity(Gravity.CENTER);
        loadingLayout = new LinearLayout(this);
        loadingLayout.addView(layout);
        loadingLayout.setGravity(Gravity.CENTER);
    }
    
    private class scrollListener implements OnScrollListener {
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // 当listView中没有数据,或者数据超过100条,或者不是10的整数倍(即数据不足)时隐藏“更多”并取消onScroll事件的绑定
            if (mMyAdapter.getCount() >= 100 || mMyAdapter.getCount() % 10 > 0
                    || mMyAdapter.getCount() == 0) {
                listView.removeFooterView(loadingLayout);
                listView.setOnScrollListener(null);
            }
            lastItem = firstVisibleItem + visibleItemCount - 1;// 这里减一是因为有FootView
        }        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (lastItem == mMyAdapter.getCount()
                    && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
                // 进行翻页操作
                new scrollTask().execute(null);
            }        }
    }
    
    public class readTask extends AsyncTask<Object, Void, Void> {
    
        @Override
        protected Void doInBackground(Object... arg0) {
            users = new stringGetJson().getJson();
            return null;
        }        @Override
        protected void onPostExecute(Void result) {
            listView.addFooterView(loadingLayout);
            
            mMyAdapter = new MyAdapter(stringListActivity.this, users);
            setListAdapter(mMyAdapter);
            listView.setOnScrollListener(new scrollListener());
        }
    }    public class scrollTask extends AsyncTask<Object, Void, Void> {
        
        @Override
        protected Void doInBackground(Object... arg0) {
            for (Iterator iterator = new stringGetJson().getJson()
                    .iterator(); iterator.hasNext();) {
                User user = (User) iterator.next();
                users.add(user);
            }
            return null;
        }        @Override
        protected void onPostExecute(Void result) {
            mMyAdapter.notifyDataSetChanged();
        }
    }
}

Json数据来源(这里的例子中把json字符串直接写在代码中了,实际项目中需要改成从网络读取,例子中已经使用了多线程):

package COM.Example.Main;import java.lang.reflect.Type;import java.util.Iterator;import java.util.LinkedList;import android.database.MatrixCursor;import android.widget.ListView;import android.widget.TextView;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class stringGetJson {        // 设置临时ID,在项目中将被现实的id取代    private int id = 0;        public stringGetJson() {        super();    }    //通过getJson方法从Json字符串获取User的列表    public LinkedList<User> getJson() {        String jsonData = "[{\"Name\":\"xinuxForJson1\",\"Pic\":\"http://www.qqjay.com/uploads/110414/1_234626_5.jpg\"},{\"Name\":\"xinuxForJson2\",\"Pic\":\"http://www.qqjay.com/uploads/110414/1_234626_3.jpg\"},{\"Name\":\"xinuxForJson3\",\"Pic\":\"http://www.qqjay.com/uploads/110414/1_234626_4.jpg\"},{\"Name\":\"xinuxForJson4\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/8.jpg\"},{\"Name\":\"xinuxForJson5\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/10.jpg\"},{\"Name\":\"xinuxForJson6\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/7.jpg\"},{\"Name\":\"xinuxForJson7\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/11.jpg\"},{\"Name\":\"xinuxForJson8\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/12.jpg\"},{\"Name\":\"xinuxForJson9\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian1/9.jpg\"},{\"Name\":\"xinuxForJson10\",\"Pic\":\"http://sucai.qqjay.com/fengmian/201104/tupian/7.jpg\"}]";        Type listType = new TypeToken<LinkedList<User>>() {}.getType();        Gson gson = new Gson();        LinkedList<User> users = gson.fromJson(jsonData, listType);        return users;    }    //为getJson提供了数据实体类    final static class User {        public String Name;        public String Pic;    }}

图片下载AsyncTask

package COM.Example.Main;import COM.Example.FunctionUtility.Download;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.widget.ImageView;public class downImageTask extends AsyncTask<ImageView, Void, Bitmap> {
    
    ImageView gView = null;
    @Override
    protected Bitmap doInBackground(ImageView... arg0) {
        gView = (ImageView)arg0[0];
        return Download.getBitmapFromUrl(gView.getTag().toString());
    }    @Override
    protected void onPostExecute(Bitmap result) {
        if(result != null){
        this.gView.setImageBitmap(result);
        }
        this.gView = null;
    }
}

网络图片下载类:

★android开发–ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)package COM.Example.FunctionUtility;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class Download {
    public static Bitmap getBitmapFromUrl(String imgUrl) {
        URL url;
        Bitmap bitmap = null;
        try {
            url = new URL(imgUrl);
            InputStream is = url.openConnection().getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bitmap = BitmapFactory.decodeStream(bis);
            bis.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}转自:http://www.cnblogs.com/yeagen/archive/2011/04/19/2020985.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919