本篇代码需加依赖:
json依赖
implementation ‘com.google.code.gson:gson:2.2.4’
把网络请求数据转成String类型
charStreams
implementation ‘com.google.guava:guava:16.0.1’
网络图片的依赖
implementation ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’:
记得导入项目PullToRefresh,导入后也要进行依赖
https://github.com/chrisbanes/Android-PullToRefresh
应用工具类——HttpUrl,BaseFragment,App
HttpUrl主要内容为HTTPURLConnection请求数据
BaseFragment主要内容为一些方法initView,initData,getLayoutReId
App主要内容为ImageLoader的处理
1.HttpUrl
import com.google.common.io.CharStreams;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpUrl {
private static String string1;
public static String getData(final String string){
try {
URL url=new URL(string);
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(3000);
urlConnection.setConnectTimeout(3000);
int code = urlConnection.getResponseCode();
if (code==200){
InputStream inputStream=urlConnection.getInputStream();
InputStreamReader streamReader=new InputStreamReader(inputStream,"UTF-8");
string1 = CharStreams.toString(streamReader);
string1.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return string1;
}
}
2.BaseFragment
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(getLayoutReId(),container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
initView(view);
initData();
}
protected abstract void initData();
protected abstract void initView(View view);
protected abstract int getLayoutReId();
}
3.App
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration imageLoaderConfiguration=ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(imageLoaderConfiguration);
}
}
接下来就是代码了,这是一个Fragment,继承写的那个工具类BaseFragment
Fragment
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ListView;
import com.bwie.asus.mn2.R;
import com.bwie.asus.mn2.adapter.HomeJJAdapter;
import com.bwie.asus.mn2.bean.JsonBean;
import com.bwie.asus.mn2.utility.BaseFragment;
import com.bwie.asus.mn2.utility.HttpUrl;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
public class HomeJJFragment extends BaseFragment {
private PullToRefreshListView listView;
private String p="http://api.expoon.com/AppNews/getNewsList/type/1/p/";
private int num=1;
private List<JsonBean.DataBean> data1=new ArrayList<>();
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
homeJJAdapter.notifyDataSetChanged();
listView.onRefreshComplete();
break;
}
}
};
private HomeJJAdapter homeJJAdapter;
@Override
protected void initData() {
}
public void getUrl(final int num){
new Thread(){
@Override
public void run() {
super.run();
HttpUrl httpUrl =new HttpUrl();
String data = httpUrl.getData(p+num);
Gson gson=new Gson();
JsonBean jsonBean = gson.fromJson(data, JsonBean.class);
if (num==1){
data1.clear();
}
data1.addAll(jsonBean.getData());
Message message=new Message();
message.what=1;
message.obj= homeJJAdapter;
handler.sendMessage(message);
}
}.start();
}
@Override
protected void initView(View view) {
listView = view.findViewById(R.id.listView);
listView.setMode(PullToRefreshBase.Mode.BOTH);
homeJJAdapter = new HomeJJAdapter(getActivity(), (ArrayList<JsonBean.DataBean>) data1);
listView.setAdapter(homeJJAdapter);
listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
num=1;
getUrl(num);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
num++;
getUrl(num);
}
});
num=1;
getUrl(num);
}
@Override
protected int getLayoutReId() {
return R.layout.home_list_fragment;
}
}
适配器 HomeJJAdapter
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bwie.asus.mn2.R;
import com.bwie.asus.mn2.bean.JsonBean;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class HomeJJAdapter extends BaseAdapter {
private Context context;
private ArrayList<JsonBean.DataBean> list;
public HomeJJAdapter(Context context, ArrayList<JsonBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null){
holder=new ViewHolder();
convertView = View.inflate(context, R.layout.list_item, null);
holder.text=convertView.findViewById(R.id.text);
holder.image=convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else {
holder= (ViewHolder) convertView.getTag();
}
holder.text.setText(list.get(position).getNews_title());
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),holder.image,options);
return convertView;
}
class ViewHolder{
TextView text;
ImageView image;
}
}
布局
list的布局
实现的效果