android Xlistview网络请求

这篇博客介绍了如何在Android项目中结合Xlistview进行网络请求。首先展示了基本的ConstraintLayout布局,接着详细说明了条目布局、Activity设置、自定义应用类和适配器的实现。同时,提到了添加必要的权限和图片配置,虽然作者表示代码质量一般,但对于初学者来说是一份入门指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写,有很多不懂的地方,请见谅
首先来看布局
`<?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));
    }
}

写得很渣,建议忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值