//--------------------------------------------解析、添加到集合、展示------------------------------
public class Tab_fragment_hu extends BaseFragment {
private int num=1; //默认第一页
//接口
private String path = "http://mnews.gw.com.cn/wap/data/news/news/mobile/jbgg/page_"+num+".json";
private PullToRefreshListView plistview;
private Handler handler = new Handler();
private MyAdapter myAdapter;
private JSONArray newdata;
@Override
protected int ResultId() {
//布局页面
return R.layout.fragment_hu;
}
@Override
protected void initView(View view) {
//初始化控件
plistview = view.findViewById(R.id.plistview);
}
@Override
protected void initData() {
//解析数据方法
getData(1);
//刷新方法
getShua();
plistview.setMode(PullToRefreshListView.Mode.BOTH); //同时支持上拉加载和下拉刷新
}
//下拉加载
private void getShua() {
plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//handler加载
handler.postDelayed(new Runnable() {
@Override
public void run() {
num = 1; //第一页数据
getData(1); //刷新完默认展示第一页数据
plistview.onRefreshComplete(); //停止刷新
}
},3000);
myAdapter.notifyDataSetInvalidated(); //刷新适配器
}
//上拉加载
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
num++; //页面数据累加
getData(num); //展示所有数据
plistview.onRefreshComplete(); //停止刷新
}
},3000); //延迟3秒
myAdapter.notifyDataSetInvalidated(); //刷新适配器
}
});
}
//AsyncTask异步请求
private void getData(final int num) {
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(5000);
urlConnection.setRequestMethod("GET");
if(urlConnection.getResponseCode()==200){
InputStream inputStream = urlConnection.getInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
String json = outputStream.toString();
inputStream.close();
outputStream.close();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
//原生解析
JSONArray jsonArray = new JSONArray(s);
JSONObject jsonObject = jsonArray.getJSONObject(0);
JSONArray data = jsonObject.getJSONArray("data");
//如果第一页数据 缓存到数据库 //这一步没要求缓存的时候不用写
if(num==1){
newdata = new JSONArray();
}
//循环添加到集合 在列表上展示出来
for (int i = 0;i<data.length();i++){
newdata.put(data.get(i));
}
//适配器
myAdapter = new MyAdapter(getActivity(), newdata);
plistview.setAdapter(myAdapter);
//显示新的一页
} catch (Exception e) {
e.printStackTrace();
}
}
}.execute(path);
}
}
//-----------------------------适配器内容----------------------------------
public class MyAdapter extends BaseAdapter {
private Context context;
private JSONArray list;
private ImageLoader imageLoader = ImageLoader.getInstance();
private DisplayImageOptions builder;
public MyAdapter(Context context, JSONArray list) {
this.context = context;
this.list = list;
builder = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
}
@Override
public int getCount() {
return list.length();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View contentview, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(contentview==null){
contentview = View.inflate(context, R.layout.item,null);
viewHolder = new ViewHolder();
viewHolder.img = contentview.findViewById(R.id.img);
viewHolder.title = contentview.findViewById(R.id.title);
contentview.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) contentview.getTag();
}
try {
JSONObject jsonObject = list.getJSONObject(position);
String title = jsonObject.getString("title");
viewHolder.title.setText(title);
String img = jsonObject.getString("img");
imageLoader.displayImage(img,viewHolder.img,builder);
} catch (JSONException e) {
e.printStackTrace();
}
return contentview;
}
class ViewHolder{
public ImageView img;
public TextView title;
}
}
AsyncTask异步加载+原生解析
最新推荐文章于 2021-03-17 10:17:34 发布