异步任务+JSON解析+ListView分页

一、利用异步任务+JSON解析+ListView分页来实现网络访问数据显示在ListView中:
(一)、示例代码:
publicclass MainActivity extends Activity {

privatestaticfinal String TAG = "MainActivity";

private ListView listView_main_newslist;

private LinearLayout layout_main_more;

private String urlString = "http://192.168.125.140:8080/AndroidServer/ShowQuestionlist?page=";

privatebooleanisBottom = false;

privateintcurPage = 1;

private SimpleAdapter adapter = null;

private List<Map<String, String>> totalList = null;

      @Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

               setContentView(R.layout.activity_main);

               listView_main_newslist = (ListView) findViewById(R.id.listView_main_newslist);

layout_main_more = (LinearLayout) findViewById(R.id.layout_main_more);

            

       // 执行异步任务,获取劲松字符串

new MyTask(this).execute(urlString);

               // 给listview设置适配器。数据源随着页面变化而不断追加新的数据

totalList = new ArrayList<Map<String, String>>();

adapter = new SimpleAdapter(this, totalList,R.layout.item_listview_main, new String[] { "question" },

newint[] { R.id.text_item_listview_title });

               listView_main_newslist.setAdapter(adapter);

               // 给ListView设置滚动监听器

listView_main_newslist.setOnScrollListener(new OnScrollListener() {

                   

@Override

publicvoid onScrollStateChanged(AbsListView view, int scrollState) {

if (isBottom) {

layout_main_more.setVisibility(View.VISIBLE);

                         } else {

layout_main_more.setVisibility(View.GONE);

                         }

                 }

           @Override

publicvoid onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {

isBottom = ((firstVisibleItem + visibleItemCount) == totalItemCount);

            }

       }

publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.layout_main_more:

                      curPage++;

new MyTask(this).execute(urlString + curPage);

layout_main_more.setVisibility(View.GONE);

break;

default:

break;

               }

       }

class MyTask extends AsyncTask<String, Void, byte[]> {

private Context context;

private ProgressDialog pDialog;

public MyTask(Context context) {

this.context = context;

pDialog = new ProgressDialog(context);

pDialog.setIcon(R.drawable.ic_launcher);

pDialog.setTitle("提示:");

pDialog.setMessage("数据加载中...");

               }

           @Override

protectedvoid onPreExecute() {

super.onPreExecute();

pDialog.show();

               }

               @Override

protectedbyte[] doInBackground(String... params) {

                       BufferedInputStream bis = null;

                       ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {

                               URL url = new URL(params[0]);

                               HttpURLConnection httpConn = (HttpURLConnection) url .openConnection();

if (httpConn.getResponseCode() == 200) {

                                       bis = new BufferedInputStream(httpConn.getInputStream());

byte[] buffer = newbyte[8 * 1024];

int c = 0;

while ((c = bis.read(buffer)) != -1) {

                                               baos.write(buffer, 0, c);

                                               baos.flush();

                                       }

return baos.toByteArray();

                               }

                       } catch (Exception e) {

                               e.printStackTrace();

                       } finally {

try {

if (bis != null) {

                                               bis.close();

                                       }

                                       baos.close();

                               } catch (IOException e) {

                                       e.printStackTrace();

                               }

                       }

returnnull;

               }

               @Override

protectedvoid onPostExecute(byte[] result) {

super.onPostExecute(result);

if (result != null) {

                            // 开始执行json解析

try {

                                       String data = new String(result, "utf-8");

                                       // 将异步任务访问到的字节数组转成字符串,再通过json解析成list集合

                                       List<Map<String, String>> list = jsonToList(data);

totalList.addAll(list);

adapter.notifyDataSetChanged();

                               } catch (Exception e) {

                                       e.printStackTrace();

                               }

                       } else {

                               Toast.makeText(context, "网络异常,加载失败!", Toast.LENGTH_SHORT) .show();

                       }

pDialog.dismiss();

               }

       }

       // 解析json字符串,生成list集合

private List<Map<String, String>> jsonToList(String jsonString) {

               List<Map<String, String>> list = new ArrayList<Map<String, String>>();

try {

                       JSONObject jsonObject = new JSONObject(jsonString);

                       JSONArray jsonArray = jsonObject.getJSONArray("result");

for (int i = 0; i < jsonArray.length(); i++) {

                               Map<String, String> map = new HashMap<String, String>();

                               JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                               String data = jsonObject2.getString("question");

                               map.put("question", data);

                               list.add(map);

                       }

return list;

               } catch (JSONException e) {

                       e.printStackTrace();

               }

returnnull;

       }

}

二、利用异步任务+JSON解析+ListView分页+自定义适配器 来实现网络访问数据显示在ListView中:
(一)、示例代码:
publicclass MainActivity extends Activity {

privatestaticfinal String TAG = "MainActivity";

private ListView listView_main_newslist;

private LinearLayout layout_main_more;

private String urlString = "http://192.168.56.1:8080/AndroidServer/ShowQuestionlist?page=";

privatebooleanisBottom = false;

privateintcurPage = 1;

private MyAdapter adapter = null;

private List<Map<String, String>> totalList = null;

       @Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

               setContentView(R.layout.activity_main);

               listView_main_newslist = (ListView) findViewById(R.id.listView_main_newslist);

layout_main_more = (LinearLayout) findViewById(R.id.layout_main_more);

               // 执行异步任务,获取劲松字符串

new MyTask(this).execute(urlString);

               // 给listview设置适配器。数据源随着页面变化而不断追加新的数据

totalList = new ArrayList<Map<String, String>>();

              // adapter = new SimpleAdapter(this, totalList,

              // R.layout.item_listview_main, new String[] { "question" },

              // new int[] { R.id.text_item_listview_title });

             // 自定义适配器。

adapter = MyAdapter(this, totalList);

             listView_main_newslist.setAdapter(adapter);

            // 给ListView设置滚动监听器

listView_main_newslist.setOnScrollListener(new OnScrollListener() {

                   @Override

publicvoid onScrollStateChanged(AbsListView view, int scrollState) {

if (isBottom) {

layout_main_more.setVisibility(View.VISIBLE);

                            } else {

layout_main_more.setVisibility(View.GONE);

                            }

                       }

                   @Override

publicvoid onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

isBottom = ((firstVisibleItem + visibleItemCount) == totalItemCount);

                       }

               });

       }

publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.layout_main_more:

                      curPage++;

new MyTask(this).execute(urlString + curPage);

layout_main_more.setVisibility(View.GONE);

break;

default:

break;

               }

       }

class MyTask extends AsyncTask<String, Void, byte[]> {

private Context context;

private ProgressDialog pDialog;

public MyTask(Context context) {

this.context = context;

pDialog = new ProgressDialog(context);

pDialog.setIcon(R.drawable.ic_launcher);

pDialog.setTitle("提示:");

pDialog.setMessage("数据加载中...");

               }

               @Override

protectedvoid onPreExecute() {

super.onPreExecute();

pDialog.show();

               }

               @Override

protectedbyte[] doInBackground(String... params) {

                       BufferedInputStream bis = null;

                       ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {

                               URL url = new URL(params[0]);

                               HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

if (httpConn.getResponseCode() == 200) {

                                       bis = new BufferedInputStream(httpConn.getInputStream());

byte[] buffer = newbyte[8 * 1024];

int c = 0;

while ((c = bis.read(buffer)) != -1) {

                                               baos.write(buffer, 0, c);

                                               baos.flush();

                                       }

return baos.toByteArray();

                               }

                       } catch (Exception e) {

                               e.printStackTrace();

                       } finally {

try {

if (bis != null) {

                                               bis.close();

                                       }

                                       baos.close();

                               } catch (IOException e) {

                                       e.printStackTrace();

                               }

                       }

returnnull;

               }

               @Override

protectedvoid onPostExecute(byte[] result) {

super.onPostExecute(result);

if (result != null) {

                               // 开始执行json解析

try {

                                       String data = new String(result, "utf-8");

                                    // 将异步任务访问到的字节数组转成字符串,再通过json解析成list集合

                                       List<Map<String, String>> list = jsonToList(data);

totalList.addAll(list);

adapter.notifyDataSetChanged();

                               } catch (Exception e) {

                                       e.printStackTrace();

                               }

                       } else {

                               Toast.makeText(context, "网络异常,加载失败!", Toast.LENGTH_SHORT).show();

                       }

pDialog.dismiss();

               }

       }

    // 解析json字符串,生成list集合

private List<Map<String, String>> jsonToList(String jsonString) {

               List<Map<String, String>> list = new ArrayList<Map<String, String>>();

try {

                       JSONObject jsonObject = new JSONObject(jsonString);

                       JSONArray jsonArray = jsonObject.getJSONArray("result");

for (int i = 0; i < jsonArray.length(); i++) {

                               Map<String, String> map = new HashMap<String, String>();

                               JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                               String data = jsonObject2.getString("question");

                               map.put("question", data);

                               list.add(map);

                       }

return list;

               } catch (JSONException e) {

                       e.printStackTrace();

               }

returnnull;

       }

class MyAdapter extends BaseAdapter {

private Context context;

private List<Map<String, String>> list = null;

public MyAdapter(Context context, List<Map<String, String>> list) {

this.context = context;

this.list = list;

               }

              @Override

publicint getCount() {

returnlist.size();

               }

              @Override

public Object getItem(int position) {

returnlist.get(position);

               }

              @Override

publiclong getItemId(int position) {

return position;

               }

              @Override

public View getView(int position, View convertView, ViewGroup parent) {

                       ViewHolder mHolder = null;

if (convertView == null) {

                               mHolder = new ViewHolder();

                               convertView = LayoutInflater.from(context).inflate(

       R.layout.item_listview_main, parent, false);

                               mHolder.text_item_listview_title = (TextView) convertView

                               .findViewById(R.id.text_item_listview_title);

                               convertView.setTag(mHolder);

                       } else {

                               mHolder = (ViewHolder) convertView.getTag();

                       }

                       mHolder.text_item_listview_title.setText(list.get(position).get("question").toString());

return convertView;

               }

class ViewHolder {

private TextView text_item_listview_title;

               }

       }

}

异步任务+JSON解析+ListView分页相关推荐

  1. android json分页,移动测试之异步任务+JSON解析+ListView分页

    一.利用异步任务+JSON解析+ListView分页来实现网络访问数据显示在ListView中: (一).示例代码: public class MainActivity extends Activit ...

  2. 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

    在平常的开发中经常会有很多列表页面,每做一个列表页就需要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件.如果版本更新迭代比较频繁,如此以往,就会使项目工程变得无 ...

  3. json解析到listview(爱帮公交demo)

    转载自:http://www.chenwg.com/android开发/json解析到listview 本项目是使用爱帮公交提供的SDK作为我们开发的基础,通过输入公交路线,发送到远程服务器,接着远程 ...

  4. Android ListView分页,动态添加数据

    1.ListView分页的实现,重点在于实现OnScrollListener接口,判断滑动到最后一项时,是否还有数据可以加载, 我们可以利用listView.addFootView(View v)方法 ...

  5. 浅谈Android中的异步加载之ListView中图片的缓存及优化三

    隔了很久没写博客,现在必须快速脉动回来.今天我还是接着上一个多线程中的异步加载系列中的最后一个使用异步加载实现ListView中的图片缓存及其优化.具体来说这次是一个综合Demo.但是个人觉得里面还算 ...

  6. C# json解析字符串总是多出双引号_json从立地到成佛

    本文原创作者bigsai(同公众号),本文以浅显易懂的方式给大家讲解自己所认知的json,如果有错误或者不准确地方还请大家给出指正,另外本文以关卡课程的方式在博学谷也是免费开放的,大家也可通过关卡方式 ...

  7. Android网络数据JSON解析使用总结

    一.JSON基础知识 (一)什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于Java ...

  8. flutter 动画json_Flutter 中的 JSON 解析

    JSON 是我们开发中最常使用的一种数据格式,这篇文章中,我们主要看看在开发中最常见的几种格式的 JSON 数据在 Flutter 中的解析: 以下案例中,我们都会将json文件放到本地,也就是 as ...

  9. android listview分页显示,Android应用中使用ListView来分页显示刷新的内容

    点击按钮刷新1.效果如下: 实例如下:  上图的添加数据按钮可以换成一个进度条  因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: ...

  10. JSON 解析的两种方法

    今天帮朋友看了下JSON解析结果············· eval解析JSON中的注意点 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. ...

最新文章

  1. mahout 算法集
  2. 架构师经常参考的Netflix架构,它的全貌是怎样的?
  3. 《Spring Cloud Netflix官方文档》1.服务发现:Eureka客户端
  4. 启明云端分享|大家都知道ESP32-C3是乐鑫5月刚量产的芯片,大家都传是取代ESP8266的,目前也确实有很多客户升级应用选择替换,那Esp8266与Esp32-C3 从硬件到应用开发有哪些不同呢
  5. sscanf取固定长度的int_sscanf函数用法详解-阿里云开发者社区
  6. linux c mysql教程_Linux c访问mysql 编写入门
  7. ubuntu java 1.8 1.7_java – 在Ubuntu上从JDK 1.7移动到JDK 1.8
  8. java文件读写的基本类_java常用工具类(三)—— 文件读取的操作类
  9. oracle读写mysql_Oracle读写磁盘经过的缓存
  10. 表白代码(纯干货),送给你爱的人
  11. 综合布线(楼栋)需求分析报告
  12. Android多开框架优化游戏防闪思路
  13. ./configure, make, sudo make install 的含义
  14. python 中的switch
  15. scikit-learn笔记
  16. 两个L组成的括号?(取整符号)
  17. windows查看进程及杀死进程
  18. 《管理经济学》公式大全
  19. 运算符、操作符、if switch语句婚礼纪主页
  20. java天眼培训_Java天眼大型分布式跟踪系统 附带源码_IT教程网

热门文章

  1. python小学教材全解_小学教材全解五年级数学上人教版
  2. 白猫使用OCR文字识别
  3. 事业单位计算机技术岗工资,事业单位待遇,是管理岗好还是技术岗好?
  4. 大圆航线、恒向线绘制
  5. 测试用例设计设计方法——正交实验法
  6. 90后美女学霸传奇人生:出身清华姚班,成斯坦福AI实验室负责人高徒
  7. 传感网应用开发(中级)网络协议报文详解
  8. 碳足迹 carbon footprint
  9. LTSC2019的踩坑经验
  10. 记录阿里技术面试全流程