第一次写,有很多不懂的地方,请见谅
首先来看布局
`<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=".MainActivity">
<me.maxwin.view.XListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.constraint.ConstraintLayout>`
| 条目布局| |
|-<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:orientation=“vertical”
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题标题标题标题"
android:textSize="20sp"
android:padding="10dp"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2017-01-01"
android:textSize="15sp"
android:padding="10dp"
android:layout_marginTop="15dp"/>
</LinearLayout>
-|–|
| | |
再看activity
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
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.URL;
import java.net.URLConnection;
import java.util.List;
import me.maxwin.view.XListView;
public class MainActivity extends AppCompatActivity {
private int page=0;
private XListView lv;
private Madpter madpter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = findViewById(R.id.lv);
lv.setPullLoadEnable(true);
lv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page=0;
loadData(page);
}
@Override
public void onLoadMore() {
loadData(page);
}
});
madpter = new Madpter(getLayoutInflater());
lv.setAdapter(madpter);
loadData(page);
}
private final String uri="http://apis.juhe.cn/cook/query?key=5f446dd72ca2176336492b87bbdb1981&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=";
private void loadData(int page){
String request=uri+page;
new AsyncTask<String,Void,List<PhoneBean.ResultBean.DataBean>>(){
@Override
protected List<PhoneBean.ResultBean.DataBean> doInBackground(String... strings) {
PhoneBean phoneBean=null;
try {
URL url = new URL(strings[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
int responseCode = con.getResponseCode();
if (responseCode==200){
String str = Stramert(con.getInputStream());
phoneBean = new Gson().fromJson(str,PhoneBean.class);
}else {
}
return phoneBean.getResult().getData() ==null ? null : phoneBean.getResult().getData();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(List<PhoneBean.ResultBean.DataBean> data) {
if (data==null){
Toast.makeText(MainActivity.this,"网络请求错误",Toast.LENGTH_LONG).show();
return;
}
getupdate(data);
load();
}
}.execute(request);
}
private String Stramert(InputStream is) {
BufferedReader buff = new BufferedReader(new InputStreamReader(is));
StringBuilder sbr = new StringBuilder();
try {
for (String btm=buff.readLine(); btm!=null; btm=buff.readLine()){
sbr.append(btm);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
buff.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sbr.toString();
}
private void getupdate(List<PhoneBean.ResultBean.DataBean> list){
if (page==0){
madpter.setData(list);
}else {
madpter.addData(list);
}
}
private void load(){
page++;
lv.stopLoadMore();
lv.stopRefresh();
}
}
之后是应用类
public class PhoneBean {
private String resultcode;
private String reason;
private ResultBean result;
private int error_code;
public String getResultcode() {
return resultcode;
}
public void setResultcode(String resultcode) {
this.resultcode = resultcode;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public ResultBean getResult() {
return result;
}
public void setResult(ResultBean result) {
this.result = result;
}
public int getError_code() {
return error_code;
}
public void setError_code(int error_code) {
this.error_code = error_code;
}
public static class ResultBean {
private String totalNum;
private String pn;
private String rn;
private List<DataBean> data;
public String getTotalNum() {
return totalNum;
}
public void setTotalNum(String totalNum) {
this.totalNum = totalNum;
}
public String getPn() {
return pn;
}
public void setPn(String pn) {
this.pn = pn;
}
public String getRn() {
return rn;
}
public void setRn(String rn) {
this.rn = rn;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private String id;
private String title;
private String tags;
private String imtro;
private String ingredients;
private String burden;
private List<String> albums;
private List<StepsBean> steps;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public String getImtro() {
return imtro;
}
public void setImtro(String imtro) {
this.imtro = imtro;
}
public String getIngredients() {
return ingredients;
}
public void setIngredients(String ingredients) {
this.ingredients = ingredients;
}
public String getBurden() {
return burden;
}
public void setBurden(String burden) {
this.burden = burden;
}
public List<String> getAlbums() {
return albums;
}
public void setAlbums(List<String> albums) {
this.albums = albums;
}
public List<StepsBean> getSteps() {
return steps;
}
public void setSteps(List<StepsBean> steps) {
this.steps = steps;
}
public String getfimage(){
return albums==null || albums.size()==0 ?"" : albums.get(0);
}
public static class StepsBean {
private String img;
private String step;
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getStep() {
return step;
}
public void setStep(String step) {
this.step = step;
}
}
}
}
}
定义完应用类之后再看看适配器
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 java.util.ArrayList;
import java.util.List;
class Madpter extends BaseAdapter {
private List<PhoneBean.ResultBean.DataBean> data;
private LayoutInflater inflater;
public Madpter(LayoutInflater inflater) {
this.inflater = inflater;
data=new ArrayList<PhoneBean.ResultBean.DataBean>();
}
public void addData(List<PhoneBean.ResultBean.DataBean> list){
if (list!=null){
data.addAll(list);
notifyDataSetChanged();
}
}
public void setData(List<PhoneBean.ResultBean.DataBean> list){
data.clear();
if (list!=null){
data.addAll(list);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return data.size();
}
@Override
public PhoneBean.ResultBean.DataBean getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder vh;
if(view==null){
view=inflater.inflate(R.layout.item,viewGroup,false);
vh=new ViewHolder(view);
}else {
vh= (ViewHolder) view.getTag();
}
vh.setBind(getItem(i));
return view;
}
class ViewHolder{
private TextView title,name;
private ImageView image;
public ViewHolder(View itemview){
title=itemview.findViewById(R.id.title);
name=itemview.findViewById(R.id.name);
image=itemview.findViewById(R.id.image);
itemview.setTag(this);
}
public void setBind(PhoneBean.ResultBean.DataBean dataBean){
title.setText(dataBean.getTitle());
name.setText(dataBean.getId());
ImageLoader.getInstance().displayImage(dataBean.getfimage(),image,ImageLoaderConfigs.getDisplayImageOptions(image.getContext()));
}
}
}
注意,不要忘了权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.day09">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".App"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
在之后就是照片的配置
import android.content.Context;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class ImageLoaderConfigs {
public static ImageLoaderConfiguration getImageLoaderConfiguration(Context context){
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(context)
.showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置
//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
//设置图片加入缓存前,对bitmap进行设置
//.preProcessor(BitmapProcessor preProcessor)
.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
return build;
}
public static DisplayImageOptions getDisplayImageOptions(Context context){
DisplayImageOptions build = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.build();
return build;
}
}
间隔
package com.example.day09;
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoader.getInstance().init(ImageLoaderConfigs.getImageLoaderConfiguration(this));
}
}
写得很渣,建议忽略