1. 程式人生 > >AsyncTask+gson資料展示+資料庫+網路判斷+點選刪除

AsyncTask+gson資料展示+資料庫+網路判斷+點選刪除

**

MainActivity頁面

**

package com.example.lx_zk1.activity;

import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.lx_zk1.R;
import com.example.lx_zk1.adapter.TabAdapter;

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private TabLayout tabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取資源ID
        viewPager = findViewById(R.id.viewpager);
        tabLayout = findViewById(R.id.tab);

        //設定介面卡
        TabAdapter adapter = new TabAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        //根據viewpager設定tab
        tabLayout.setupWithViewPager(viewPager);
    }
}

**

TabLayout和ViewPager的介面卡頁面

**

package com.example.lx_zk1.adapter;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.example.lx_zk1.fragment.SFragment;
import com.example.lx_zk1.fragment.WFragment;

public class TabAdapter extends FragmentPagerAdapter {
    //建立一個string集合
    private String[] menus = new String[]{
        "首頁","視訊","我的"
    };

    public TabAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new SFragment();
                default:
                    return new WFragment();
        }
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return menus[position];
    }

    @Override
    public int getCount() {
        return menus.length;
    }
}

**

首頁頁面 SFragment

**

package com.example.lx_zk1.fragment;

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 android.widget.Toast;

import com.example.lx_zk1.R;
import com.example.lx_zk1.adapter.UserAdapter;
import com.example.lx_zk1.bean.Bean;
import com.example.lx_zk1.sql.Dao;
import com.example.lx_zk1.util.NetUtil;
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;

public class SFragment extends Fragment {
    private ListView listView;
    private UserAdapter adapter;
    private List<Bean.DataBean> list;
    private Dao dao;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sfragment,container,false);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //獲取資源id
        listView = view.findViewById(R.id.listview);
        //設定介面卡
        adapter = new UserAdapter(getActivity());
        listView.setAdapter(adapter);
        dao = new Dao(getActivity());
        initData();

        //長按刪除
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                dao.del(adapter.getItem(position).getNews_title());
                adapter.delData(position);

                return true;
            }
        });


    }

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

    private void initData(){
        if (!NetUtil.getInstance().panduan(getContext())){
            Toast.makeText(getContext(),"網路錯誤",Toast.LENGTH_SHORT).show();
            return;
        }else {
            NetUtil.getInstance().RequestData(urlstr, Bean.class, new NetUtil.CaLLBack<Bean>() {
                @Override
                public void onSuccess(Bean bean) {
                    //寫入資料到資料庫
                    dao.addAll(bean.getData());
                    //展示資料到列表
                    adapter.setList(bean.getData());



                }
            });
        }
    }

}

**

Bean類

**

package com.example.lx_zk1.bean;

import java.util.List;

public class Bean {
    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_summary;
        private String news_title;
        private String pic_url;

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

        public String getNews_summary() {
            return news_summary;
        }

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

        public String getNews_title() {
            return news_title;
        }

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

        public String getPic_url() {
            return pic_url;
        }

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

**

ListView的Adapter

**

package com.example.lx_zk1.adapter;

import android.content.Context;
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.example.lx_zk1.R;
import com.example.lx_zk1.bean.Bean;
import com.nostra13.universalimageloader.core.ImageLoader;

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

public class UserAdapter extends BaseAdapter {
    private List<Bean.DataBean> list;
    private Context context;

    public UserAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<Bean.DataBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    public void addList(List<Bean.DataBean> slist){
        list.addAll(slist);
        notifyDataSetChanged();
    }

    public void delData(int position){
        list.remove(position);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Bean.DataBean getItem(int position) {
        return list.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(context).inflate(R.layout.item,parent,false);
            holder = new ViewHolder();
            holder.imageView = convertView.findViewById(R.id.imageview);
            holder.textView = convertView.findViewById(R.id.textview);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.textView.setText(getItem(position).getNews_title());
        ImageLoader.getInstance().displayImage(getItem(position).getPic_url(),holder.imageView);

        return convertView;
    }

    class ViewHolder{
        private TextView textView;
        private ImageView imageView;
    }
}

NetUtil頁面 介面回撥

package com.example.lx_zk1.util;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
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.URL;
import java.net.URLConnection;

public class NetUtil {
    private static NetUtil instance;

    public NetUtil(){

    }

    public static NetUtil getInstance(){
        if (instance==null){
            instance = new NetUtil();
        }
        return instance;
    }

    //判斷網路狀態
    public static boolean panduan(Context context){
        //建立連線管理器
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //獲取最新流動狀態
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

        return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
    }


    //建立介面
    public static interface CaLLBack<T>{
        void onSuccess(T t);
    }

    //非同步請求
    public static void RequestData(final String str, final Class clazz, final CaLLBack caLLBack){
        new AsyncTask<String, Void, Object>() {
            @Override
            protected Object doInBackground(String... strings) {
                return RequestData(str,clazz);
            }

            @Override
            protected void onPostExecute(Object o) {
                caLLBack.onSuccess(o);
            }
        }.execute(str);

    }

    //網路解析
    public static <T> T RequestData(String str, Class clazz){
        T t = (T) new Gson().fromJson(RequestData(str), clazz);
        return t;
    }

    //網路請求
    public static String RequestData(String str){
        String result = "";
        try {
            URL url = new URL(str);
            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 (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    public static String stream2String(InputStream inputStream) throws IOException {
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        for (String tmp = bufferedReader.readLine(); tmp != null; tmp = bufferedReader.readLine()){
            stringBuilder.append(tmp);
        }

        return stringBuilder.toString();
    }
}

App頁面

package com.example.lx_zk1.util;

import android.app.Application;
import android.graphics.Bitmap;

import com.example.lx_zk1.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .memoryCacheSize(10)
                .diskCacheSize(10*1024*1024)
                .defaultDisplayImageOptions(new DisplayImageOptions.Builder()
                        .bitmapConfig(Bitmap.Config.RGB_565)
                        .showImageOnLoading(R.mipmap.ic_launcher)
                        .showImageOnFail(R.mipmap.ic_launcher)
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        .cacheOnDisk(true)
                        .cacheInMemory(true)
                        .build()
                ).build();
        ImageLoader.getInstance().init(configuration);

    }
}

**

SqliteHelper頁面 建立資料庫的表

**

package com.example.lx_zk1.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table miss(id integer primary key autoincrement," +
                "title text," +
                "url text)");
    }

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

    }
}

**

Dao層

**

package com.example.lx_zk1.sql;

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

import com.example.lx_zk1.bean.Bean;
import com.nostra13.universalimageloader.utils.L;

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

public class Dao {


    private SQLiteDatabase database;

    public Dao(Context context){
        database  = new SqliteHelper(context).getWritableDatabase();
    }

    //新增
    public void add(Bean.DataBean data){
        ContentValues values = new ContentValues();
        values.put("title",data.getNews_title());
        values.put("url",data.getPic_url());
        database.insert("miss",null,values);
    }

    public void addAll(List<Bean.DataBean> list){
        for (Bean.DataBean bean : list){
            add(bean);
        }
    }

    //刪除
    public void del(String title){
        database.delete("miss","title=?",new String[]{title});
    }

    //查詢
    public List<Bean.DataBean> query(){
        List<Bean.DataBean> list = new ArrayList<>();
        Cursor query = database.query("miss", null, null, null, null, null, null);

        while (query.moveToNext()){
            String title = query.getString(query.getColumnIndex("title"));
            String url = query.getString(query.getColumnIndex("url"));

            Bean.DataBean bean = new Bean.DataBean(title,url);

            list.add(bean);
        }
        return list;
    }

}