这里的话XListView和ImageLoder的适配我就不发了,我写一些实际代码,要是需要的话有时间我会补发的
首先需要在清单文件里写一下访问权限
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
< !--在application里添加继承Application类的类名-- >
<application
...
android:name=".MyImageLoder"
...
/>
这里写的就是清单文件name属性的类名
ImageLoder类
public class MyImageLoder extends Application {
@Override
public void onCreate() {
super.onCreate();
//这些都是可以通过个人需要写的,要是需要全的话,大家可以百度
//缓存文件夹的路径
File file = StorageUtils.getOwnCacheDirectory(this, Environment.getDownloadCacheDirectory().getPath());
ImageLoaderConfiguration builder = new ImageLoaderConfiguration.Builder(this)
.threadPoolSize(3)//线程池加载的数量
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//可以通过自己的内存缓存实现
.diskCache(new UnlimitedDiskCache(file))//可以自己定义路径
.diskCacheSize(50 * 1024 * 1024)//sd卡缓存的最大值
.diskCacheFileCount(100)//可以缓存文件的数量
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.build();//开始创建
//设置缓存选项
ImageLoader.getInstance().init(builder);
}
}
写一个StreamTools 类用来获取到网络数据后,转换成字符串格式
装换类
public class StreamTools {
public static String getString(InputStream inputStream){
try {
//定义一个空的数组用来装我们取到的数据,最大是1024
byte[] bytes = new byte[1024];
//定义一个数组下标
int len=0;
//通过ByteArrayOutputStream进行转换
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//while循环一下 这里有个小知识点,如果数组下边是-1的话证明数组里已经没有数据了
while ((len=inputStream.read(bytes))!=-1){
//把我们while取到的数据写入ByteArrayOutputStream
byteArrayOutputStream.write(bytes,0,len);
}
//返回一下
return byteArrayOutputStream.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
然后是要在MainActivity的代码
MainActivity
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//需要找到xml布局文件里面listview的id
listView = (ListView) findViewById(R.id.listView);
/**
*自定义一个方法然后放入我们需要访问的路径文件路径
*这里我用的是聚合的网站,你们可以根据自己的需求写入相关网址
*/
getMessage("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=秘制红烧肉");
}
public void getMessage(String path){
//这里的话我用的异步加载
new AsyncTask<String,Void,String>(){
@Override
protected String doInBackground(String... params) {
try {
//相当于获取网址
String param = params[0];
//相当于在浏览器地址栏中输入网络地址
URL url = new URL(param);
//相当于你输入完网址和ihou,敲回车动作
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//设置请求方式 get 一定要大写
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
int code = urlConnection.getResponseCode();
//服务器响应 200 请求成功
if (code==200){
InputStream inputStream = urlConnection.getInputStream();
String s = StreamTools.getString(inputStream);
System.out.println("数据为:"+s);
return s;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//需要重写onPostExecute方法,然后可以在里边写入我们想更改的主线程
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//判断死否为空
if (s==null){
return;
}
Gson gson = new Gson();
Bean bean = gson.fromJson(s, Bean.class);
List<Bean.ResultBean.DataBean.StepsBean> steps = bean.getResult().getData().get(0).getSteps();
ListViewAdapter adapter = new ListViewAdapter(MainActivity.this,steps);
listView.setAdapter(adapter);
}
}.execute(path);//把方法传到的路径放在这里
}
}
适配器类
public class ListViewAdapter extends BaseAdapter {
private Context context;
private List<Bean.ResultBean.DataBean.StepsBean> list;
private final int PAGE_ONE = 0;
private final int PAGE_TWO = 1;
private final DisplayImageOptions builder;
public ListViewAdapter(Context context, List<Bean.ResultBean.DataBean.StepsBean> list) {
this.context = context;
this.list = list;
builder = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.cacheOnDisk(true)
.cacheInMemory(true)
.build();
}
@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 int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return PAGE_ONE;
} else {
return PAGE_TWO;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
switch (type) {
case PAGE_ONE: {
ViewHolderOne viewHolderOne = null;
if (convertView == null) {
viewHolderOne = new ViewHolderOne();
convertView = View.inflate(context, R.layout.message_one, null);
viewHolderOne.textView = (TextView) convertView.findViewById(R.id.textView_one);
viewHolderOne.imageView = (ImageView) convertView.findViewById(R.id.imageView_one);
convertView.setTag(viewHolderOne);
} else {
viewHolderOne = (ViewHolderOne) convertView.getTag();
}
viewHolderOne.textView.setText(list.get(position).getStep());
ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderOne.imageView, builder);
}
break;
case PAGE_TWO: {
ViewHolderTwo viewHolderTwo = null;
if (convertView == null) {
viewHolderTwo = new ViewHolderTwo();
convertView = View.inflate(context, R.layout.message_two, null);
viewHolderTwo.textView = (TextView) convertView.findViewById(R.id.textView_two);
viewHolderTwo.imageView = (ImageView) convertView.findViewById(R.id.imageView_two);
convertView.setTag(viewHolderTwo);
} else {
viewHolderTwo = (ViewHolderTwo) convertView.getTag();
}
viewHolderTwo.textView.setText(list.get(position).getStep());
ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderTwo.imageView, builder);
break;
}
}
return convertView;
}
}
class ViewHolderOne {
TextView textView;
ImageView imageView;
}
class ViewHolderTwo {
TextView textView;
ImageView imageView;
}
Bean对象
public class Bean {
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 static class StepsBean {
/**
* img : http://img.juhe.cn/cookbook/s/1/45_0824e37faf00b71e.jpg
* step : 1.将五花肉煮至断生状态
*/
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;
}
}
}
}
}