//MainActivity
package com.example.lenovo.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private String UrlStr="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = findViewById(R.id.lv);
final MygsonAdapter adapter = new MygsonAdapter(MainActivity.this);
listView.setAdapter(adapter);
GsonUtil.getInstance().getGson(UrlStr, MygsonBean.class, new GsonUtil.GsonCallback<MygsonBean>() {
@Override
public void GsonSuccess(MygsonBean mygsonBean) {
List<MygsonBean.Data> data = mygsonBean.getData();
adapter.setList(data);
Log.i("INFO","dad");
}
});
}
}
//适配器 Adapter
package com.example.lenovo.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import java.util.ArrayList;
import java.util.List;
class MygsonAdapter extends BaseAdapter {
private Context context;
private List<MygsonBean.Data> list;
public MygsonAdapter(Context context) {
this.context = context;
list =new ArrayList<>();
}
public void setList(List<MygsonBean.Data> list) {
this.list = list;
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public MygsonBean.Data getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHoder viewHoder;
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(R.layout.list,parent,false);
viewHoder = new ViewHoder();
viewHoder.textView1 = convertView.findViewById(R.id.t_t1);
viewHoder.textView2 = convertView.findViewById(R.id.t_t2);
viewHoder.imageView = convertView.findViewById(R.id.t_image);
convertView.setTag(viewHoder);
}else{
viewHoder = (ViewHoder) convertView.getTag();
}
viewHoder.textView1.setText(list.get(position).getNews_title());
viewHoder.textView2.setText(list.get(position).getNews_summary());
//绑定
viewHoder.imageView.setTag(list.get(position).getPic_url());
//色彩配置 开启彩色配置
final DisplayImageOptions options = new DisplayImageOptions.Builder()
//配置彩色模式
.bitmapConfig(Bitmap.Config.RGB_565)
//配置圆形
.displayer(new CircleBitmapDisplayer())
//是否缓存
.cacheInMemory(true)
.displayer(new FadeInBitmapDisplayer(2000))
.build();
//使用 ImageLoader需要在全局配置
ImageLoader.getInstance().displayImage(getItem(position).getPic_url(),viewHoder.imageView,options);
//此方法为展示图片
/*ImageUtil.getImage(list.get(position).getPic_url(), new ImageUtil.ImageCallback() {
@Override
public void onImagesuccess(String imageurl, Bitmap bitmap) {
if(imageurl.equals(viewHoder.imageView.getTag())){
//viewHoder.imageView.setImageBitmap(bitmap);
}
}
});*/
return convertView;
}
class ViewHoder{
private TextView textView1,textView2;
private ImageView imageView;
}
}
//解析数据的封装类 GsonUtil
这是一个封装类 里面有三个方法 外加一个接口 和一个单例
Aysnc 工具类 目的在于封装了方法 用于外部调用来Gson解析数据
package com.example.lenovo.myapplication;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
public class GsonUtil {
//在本方法定义一个 单例的变量
private static GsonUtil instance;
//构造我这个方法 并获取它的单例
//当物品定义的单例变量为空是 让这个方法的单例 = 定义的变量
public static GsonUtil getInstance(){
if(instance==null){
instance = new GsonUtil();
}
return instance;
}
//05定义 带有接口的方法 此方法带有AsyncTask
@SuppressLint("StaticFieldLeak")
public String getGson(final String UrlStr, final Class clazz, final GsonCallback gsonCallback){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return getRequest02(UrlStr,clazz);
}
@Override
protected void onPostExecute(Object o) {
gsonCallback.GsonSuccess(o);
}
}.execute(UrlStr);
return null;
}
//04 定义接口
public interface GsonCallback<M>{
void GsonSuccess(M m);
}
//03 定义自定义class类
public <E> E getRequest02(String UrlStr,Class clazz){
return (E) new Gson().fromJson(getRequest01(UrlStr), clazz);
}
//01 解析的方法
public String getRequest01(String UrlStr){
String result = "";
try {
URL url = new URL(UrlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200) {
result = stream2String(urlConnection.getInputStream());
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
//02 转换
private String stream2String(InputStream is) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
sb.append(tmp);
}
return sb.toString();
}
}
//解析图片的封装类 ImageUtil
package com.example.lenovo.myapplication;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
public class ImageUtil {
private static ImageUtil instance;
private static ImageUtil getInstance(){
if(instance==null){
instance = new ImageUtil();
}
return instance;
};
//03
public static void getImage(final String url, final ImageCallback imageCallback){
new AsyncTask<String, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(String... strings) {
return getbitmap(strings[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
imageCallback.onImagesuccess(url,bitmap);
}
}.execute(url);
}
//02 定义图片接口 当我这个方法被调用的时候回返回给我一个图片
public interface ImageCallback{
void onImagesuccess(String imageurl,Bitmap bitmap);
}
//01
public static Bitmap getbitmap(String UrlStr){
try {
URL url = new URL(UrlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if(responseCode==200){
return BitmapFactory.decodeStream(urlConnection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}