Http网络请求数据解析json展示数据+网络图片展示+数据库+Viewpager+Fragment

1.MainActivity主页面

package com.bwie.guoxinyu;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RadioGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends FragmentActivity {

    private ViewPager viewPager;
    private RadioGroup group;
    private List<Fragment> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取资源id
        viewPager = findViewById(R.id.viewpage);
        group = findViewById(R.id.group);
        //实例化添加fragment
        list = new ArrayList<>();
        list.add(new Fragmentone());
        list.add(new Fragmenttwo());
        list.add(new FragmentThree());
        //创建适配器
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int i) {
                return list.get(i);
            }

            @Override
            public int getCount() {
                return list.size();
            }
        });
        //滑动切换
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                switch (i){
                    case 0:
                        group.check(R.id.btn1);
                        break;
                    case 1:
                        group.check(R.id.btn2);
                        break;
                    case 2:
                        group.check(R.id.btn3);
                        break;

                }
            }
            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
        //点击切换
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.btn1:
                        viewPager.setCurrentItem(0);
                        break;
                    case R.id.btn2:
                        viewPager.setCurrentItem(1);
                        break;
                    case R.id.btn3:
                        viewPager.setCurrentItem(2);
                        break;
                }
            }
        });
    }
}

2.Bean类

package com.bwie.guoxinyu;

import java.util.List;

public class NewBean {
    private List<DataBean> data;

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
  
        private String news_id;
        private String news_title;
        private String news_summary;
        private String pic_url;

        public DataBean(String news_title, String news_summary, String pic_url) {
            this.news_title = news_title;
            this.news_summary = news_summary;
            this.pic_url = pic_url;
        }

        public String getNews_id() {
            return news_id;
        }

        public void setNews_id(String news_id) {
            this.news_id = news_id;
        }

        public String getNews_title() {
            return news_title;
        }

        public void setNews_title(String news_title) {
            this.news_title = news_title;
        }

        public String getNews_summary() {
            return news_summary;
        }

        public void setNews_summary(String news_summary) {
            this.news_summary = news_summary;
        }

        public String getPic_url() {
            return pic_url;
        }

        public void setPic_url(String pic_url) {
            this.pic_url = pic_url;
        }
    }
}

3.适配器页面

package com.bwie.guoxinyu;

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 java.util.ArrayList;
import java.util.List;

public class NewAdaper extends BaseAdapter {
    private List<NewBean.DataBean> mData;
    private Context mContext;

    public NewAdaper(Context mContext) {
        this.mContext = mContext;
        //初始化
        mData = new ArrayList<>();
    }
    //传递值得方法  共外部传值
    public void setmData(List<NewBean.DataBean> datas){
        this.mData = datas;
        notifyDataSetChanged();
    }
    //删除的方法
    public void delData(int position){
        mData.remove(position);
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public NewBean.DataBean getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        //判断是否为空
        if(convertView == null){
            //加载子布局
            convertView = LayoutInflater.from(mContext).inflate(R.layout.newitem,parent,false);
            holder = new ViewHolder(convertView);
        }else{
            //复用
            holder = (ViewHolder) convertView.getTag();
        }
        //定义赋值的方法
        holder.bind(getItem(position));
        return convertView;
    }
    //寄存器
    class ViewHolder{
        TextView title;
        TextView summary;
        ImageView image;
        //获取子布局id的方法
        public ViewHolder(View convertView) {
            title = convertView.findViewById(R.id.title);
            summary = convertView.findViewById(R.id.summary);
            image = convertView.findViewById(R.id.image);
            convertView.setTag(this);
        }
        //赋值的方法
        public void bind(NewBean.DataBean item) {
            title.setText(item.getNews_title());
            summary.setText(item.getNews_summary());
            //NetUtil.loadImage(item.getPic_url(),image);
            //每次都绑定最新的url到image
            image.setTag(item.getPic_url());
            //当加载完成,判断当前加载图片的url是否和绑定的一样
            NetUtil.loadImage(item.getPic_url(), new NetUtil.CallBack() {
                @Override
                public void loadImageSuccess(String urlImage, Bitmap bitmap) {
                    //判断当前加载图片的url是否和绑定的一样
                    if(image.getTag().equals(urlImage)){
                        image.setImageBitmap(bitmap);
                    }
                }
            });
        }
    }
}

4.工具类页面

package com.bwie.guoxinyu;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

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;

public class NetUtil {
    //网络请求数据的方法
    public static String setRquest(String urlStr){
        String json = "";
        try {
            //打开url地址
            URL url = new URL(urlStr);
            //打开连接
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //设置请求方式
            urlConnection.setRequestMethod("GET");
            //设置超时
            urlConnection.setReadTimeout(5000);
            urlConnection.setConnectTimeout(5000);
            //设置请求码
            int responseCode = urlConnection.getResponseCode();
            if(responseCode == 200){
                json = stream2String(urlConnection.getInputStream());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }
    //将字节流转换为字符流
    private static String stream2String(InputStream inputStream) throws IOException {
        InputStreamReader isr = new InputStreamReader(inputStream);
        BufferedReader br = new BufferedReader(isr);
        StringBuilder builder = new StringBuilder();
        for (String tmp = br.readLine();tmp!=null;tmp = br.readLine()){
            builder.append(tmp);
        }
        return builder.toString();
    }
    //解析json的方法 返回bean
    public static <E> E setRquest(String urlStr,Class clazz){
        String rquest = setRquest(urlStr);
        E e = (E) new Gson().fromJson(rquest, clazz);
        return e;
    }
    //加载图片的方法
    public static Bitmap loadImage(String urlImage){
        Bitmap bitmap =null;
        try {
            //打开url地址
            URL url = new URL(urlImage);
            //打开连接
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //设置请求方式
            urlConnection.setRequestMethod("GET");
            //设置超时
            urlConnection.setReadTimeout(5000);
            urlConnection.setConnectTimeout(5000);
            //设置请求码
            int responseCode = urlConnection.getResponseCode();
            if(responseCode == 200){
                //将读取出来的内容存入bitmap
               bitmap = BitmapFactory.decodeStream(urlConnection.getInputStream());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }
    //定义接口
    public interface CallBack{
        public void loadImageSuccess(String urlImage,Bitmap bitmap);
    }
    //获取图片的方法
    public static void loadImage(final String urlImage, final CallBack callBack){
        new AsyncTask<String,Void,Bitmap>(){
            @Override
            protected Bitmap doInBackground(String... strings) {
                return NetUtil.loadImage(strings[0]);
            }

            @Override
            protected void onPostExecute(Bitmap bitmap) {
                callBack.loadImageSuccess(urlImage,bitmap);
            }
        }.execute(urlImage);
    }
}

5.数据库创建表页面

package com.bwie.guoxinyu;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SqliteHelper extends SQLiteOpenHelper {
    public SqliteHelper( Context context) {
        super(context, "New.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表
        db.execSQL("create table news(id integer primary key autoincrement," +
                "news_title text," +
                "news_summary text," +
                "pic_url text)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

6.数据库方法页面增删改查

package com.bwie.guoxinyu;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class NewDao {

    private final SqliteHelper helper;
    private final SQLiteDatabase sb;

    public NewDao(Context context){
        //创建数据库
        helper = new SqliteHelper(context);
        sb = helper.getReadableDatabase();
    }
    //添加
    public void add(String news_title,String news_summary,String pic_url){
        ContentValues values = new ContentValues();
        values.put("news_title",news_title);
        values.put("news_summary",news_summary);
        values.put("pic_url",pic_url);
        sb.insert("news",null,values);
    }
    //查询
    public List<NewBean.DataBean> select(){
        Cursor news = sb.query("news", null, null, null, null, null, null);
        List<NewBean.DataBean> list = new ArrayList<>();
        while (news.moveToNext()){
            String news_title = news.getString(news.getColumnIndex("news_title"));
            String news_summary = news.getString(news.getColumnIndex("news_summary"));
            String pic_url = news.getString(news.getColumnIndex("pic_url"));
            NewBean.DataBean bean = new NewBean.DataBean(news_title,news_summary,pic_url);
            list.add(bean);
        }
        return list;
    }
    //删除
    public void delete(String news_title){
        sb.delete("news","news_title = ?",new String[]{news_title});
    }
}

7.Fragment内容页面

package com.bwie.guoxinyu;

import android.annotation.SuppressLint;
import android.os.AsyncTask;
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;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class Fragmentone extends Fragment {

    private ListView listView;
    private NewAdaper mAdaper;
    private NewDao dao;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //加载布局
        View view = inflater.inflate(R.layout.fragmentone, container, false);
        //获取资源id
        listView = view.findViewById(R.id.lv_list);
        //创建适配器
        mAdaper = new NewAdaper(getActivity());
        listView.setAdapter(mAdaper);
        dao = new NewDao(getActivity());
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //长按删除
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                dao.delete(mAdaper.getItem(position).getNews_title());
                mAdaper.delData(position);
                return true;
            }
        });
        infoDta();
    }

    private String urlStr = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

    @SuppressLint("StaticFieldLeak")
    private void infoDta() {
        new AsyncTask<String, Void, List<NewBean.DataBean>>() {
            @Override
            protected List<NewBean.DataBean> doInBackground(String... strings) {
                List<NewBean.DataBean> data = new ArrayList<>();
                //循环数组 将数据添加到集合中
                for (String url : strings) {
                    NewBean bean = NetUtil.setRquest(url, NewBean.class);
                    data.addAll(bean.getData());
                }
                //判断数据库是否有数据,没有数据向数据库添加数据
                if (dao.select().size() == 0) {
                    for (NewBean.DataBean d : data) {
                        String news_title = d.getNews_title();
                        String news_summary = d.getNews_summary();
                        String pic_url = d.getPic_url();
                        //添加数据库
                        dao.add(news_title, news_summary, pic_url);
                    }
                }
                //查询数据库
                List<NewBean.DataBean> select = dao.select();
                return select;
            }

            @Override
            protected void onPostExecute(List<NewBean.DataBean> dataBeans) {
                mAdaper.setmData(dataBeans);
            }
        }.execute(urlStr);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值