当前位置: 代码迷 >> 综合 >> XListView 上拉刷新,下拉加载(Json网络)
  详细解决方案

XListView 上拉刷新,下拉加载(Json网络)

热度:30   发布时间:2023-11-15 19:58:00.0

XListView汇总:http://blog.csdn.net/qq_37454196/article/details/78048970

权限

main.xml

 <com.example.xlistview3.View.XListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/xlistview"></com.example.xlistview3.View.XListView>
item1.xml

<ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/imageView"android:layout_weight="1" /><TextViewandroid:text="TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/textView"android:layout_weight="1" />


MainActivity.java

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {private XListView xListView;//=号后面表示页码 1表示第一页private static final String JSON_URL = "http://www.93.gov.cn/93app/data.do?channelId=2&startNum=";int pageNum = 1;private SuperClass superClass;private List<SuperClass.DataBean> data;private MyAdapter myAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);xListView = (XListView) findViewById(R.id.xlistview);xListView.setPullLoadEnable(true);xListView.setXListViewListener(this);new AsyncTask<String, Integer, String>() {@Overrideprotected String doInBackground(String... params) {String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);return jsonStr;}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Gson gson = new Gson();superClass = gson.fromJson(s, SuperClass.class);//得到要是展示的数据data = superClass.getData();//把data配置给xlistviewmyAdapter = new MyAdapter(MainActivity.this, data);xListView.setAdapter(myAdapter);}}.execute();}/*** 关闭刷新和加载*/public void onLoad() {xListView.stopLoadMore();xListView.stopRefresh();xListView.setRefreshTime("刚刚");}/*** 下拉刷新,会进入这个方法*/@Overridepublic void onRefresh() {//重新加载第一页(刷新)Toast.makeText(this, "下拉刷新", Toast.LENGTH_SHORT).show();pageNum = 1;//下拉刷新的时候,把页码恢复到第一页new AsyncTask<String, Integer, String>() {@Overrideprotected String doInBackground(String... params) {String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);return jsonStr;}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Gson gson = new Gson();superClass = gson.fromJson(s, SuperClass.class);//得到要是展示的数据data = superClass.getData();//把data配置给xlistviewmyAdapter = new MyAdapter(MainActivity.this, data);xListView.setAdapter(myAdapter);onLoad();}}.execute();}/*** 上拉加载,会进入这个方法*/@Overridepublic void onLoadMore() {//加载下一页,显示在listview中Toast.makeText(this, "上拉加载", Toast.LENGTH_SHORT).show();pageNum++;//页码加1,下一页new AsyncTask<String, Integer, String>() {@Overrideprotected String doInBackground(String... params) {String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);return jsonStr;}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Gson gson = new Gson();superClass = gson.fromJson(s, SuperClass.class);//得到要是展示的数据List<SuperClass.DataBean> newPageData = superClass.getData();//新的一页的数据data.addAll(newPageData);//把新请求到的数据,追加到所有的数据(最开始的集合)的集合中myAdapter.notifyDataSetChanged();//刷新适配器,展示新的数据onLoad();//停止刷新和加载}}.execute();}
}

MyAdapter.java

public class MyAdapter extends BaseAdapter {private Context context;private List<SuperClass.DataBean> data;public MyAdapter(Context context, List<SuperClass.DataBean> data) {this.context = context;this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = View.inflate(context, R.layout.item1, null);holder.img = (ImageView) convertView.findViewById(R.id.imageView);holder.name = (TextView) convertView.findViewById(R.id.textView);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}//赋值//得到要显示的值holder.name.setText(data.get(position).getTITLE());ImageLoader.getInstance().displayImage(data.get(position).getIMAGEURL(),holder.img);return convertView;}class ViewHolder {TextView name;ImageView img;}
}

MyApplication.java

//ImageLoader类

public class MyApplication extends Application {//程序真正的入口函数@Overridepublic void onCreate() {super.onCreate();File cacheDir=this.getExternalCacheDir();//自定义缓存路径ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).memoryCache(new LruMemoryCache(2 * 1024 * 1024))//设置内存缓存区大小.memoryCacheSize(2 * 1024 * 1024)//设置缓存区大小.memoryCacheExtraOptions(320,320)//缓存图片最大的宽度与高度 px.diskCacheSize(50*1024*1024)//设置sd卡缓存的空间大小.diskCacheFileNameGenerator(new Md5FileNameGenerator())//sd卡缓存图片的命名 使用md5加密方式//自定义sd卡的缓存路径.diskCache(new UnlimitedDiskCache(cacheDir)).diskCacheFileCount(100)//缓存文件的最大数量.writeDebugLogs()//写入日志.threadPoolSize(3)//线程池.build();//对imageLoader进行初使化ImageLoader.getInstance().init(configuration);}
}
NetWorkUtils.java

public class NetWorkUtils {public String getJsonByHttpUrlConnection(String jsonUrl){URL url = null;HttpURLConnection httpURLConnection = null;String jsonStr = "";try {url = new URL(jsonUrl);//创建URL对象,连接JSON_URL对应的服务器httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接httpURLConnection.setConnectTimeout(5000);//设置请求时长为5秒httpURLConnection.setReadTimeout(5000);//设置读取服务器响应数据的时长int resCode = httpURLConnection.getResponseCode();//得到响应结果码if(resCode == 200){//表示响应成功,可以获得相应的额结果//得到响应的结果,,服务器响应的输入流InputStream inputStream = httpURLConnection.getInputStream();byte[] buffers = new byte[1024];int length = 0;while((length = inputStream.read(buffers)) != -1){//本次循环成立,说明读取到了数据jsonStr += new String(buffers,0,length);}//循环完毕,读取数据完毕Log.d("main",jsonStr);}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return jsonStr;}
}

SuperClass.java

//Bean类

http://www.93.gov.cn/93app/data.do?channelId=2&startNum=1









  相关解决方案