Android资讯新闻类App(头条、网易等),频道管理集成之数据库存储

  • 经常看新闻类的大家都知道这个频道管理。

图片转载https://blog.csdn.net/u011916937/article/details/50483278

  • 我这里是用的Github,开源项目,导入的依赖,下属必须配置。

allprojects {
    repositories {
        google()
        jcenter()
	//工程下的build.gradle
        maven {
            url "https://jitpack.io"
        }
    }
}

app下的build.gradle

implementation 'com.github.andyoom:draggrid:v1.0.1'

清单文件:

 <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 震动权限 -->
    <uses-permission android:name="android.permission.VIBRATE"/>

<activity android:name="com.andy.library.ChannelActivity"></activity>

Activity内写法:

/此activity用数据库存储数据
public class Main2Activity extends AppCompatActivity {
    private List<String> tabs = new ArrayList<>();
    private TabLayout tab;
    private ViewPager vp;
    private DBDao dbDao;
    private List<ChannelBean> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tab = findViewById(R.id.tab);
        vp = findViewById(R.id.vp);


        dbDao = new DBDao(this);
        //先查询数据库有没有数据,有数据取出选中的标签
        list = dbDao.queryData();
        if (list.size() != 0) {
            for (int i = 0; i < list.size(); i++) {
                ChannelBean channelBean = list.get(i);
                boolean select = channelBean.isSelect();
                String name = channelBean.getName();
                if (select) {
                    //为true添加给标签
                    tabs.add(name);
                }
            }
        } else {
            //第一次运行程序  初始化数据并插入数据库
            for (int i = 0; i < 10; i++) {
                ChannelBean bean = new ChannelBean("item-" + i, i < 5 ? true : false);

                dbDao.addData(bean);
            }
            //查询出数据
            list = dbDao.queryData();
            //遍历数据找出状态为true的能标签
            for (int i = 0; i < list.size(); i++) {
                ChannelBean channelBean = list.get(i);
                boolean select = channelBean.isSelect();
                String name = channelBean.getName();
                if (select) {
                    //为true添加给标签
                    tabs.add(name);
                }
            }
        }


        tab.setTabMode(TabLayout.MODE_SCROLLABLE);
        //创建适配器
        MainViewPagerAdapter adapter = new MainViewPagerAdapter(getSupportFragmentManager(), tabs);
        vp.setAdapter(adapter);
        tab.setupWithViewPager(vp);
        //频道管理
        Button bt_go = findViewById(R.id.bt_go);


        bt_go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //每次点击更新最新数据
                list = dbDao.queryData();
                ChannelActivity.startChannelActivity(Main2Activity.this, list);
            }
        });
    }

    //回传数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //清空数据
        tabs.clear();
        dbDao.delete();
        Log.i("xxx", data.getStringExtra("json"));
        //返回json数据
        String json = data.getStringExtra("json");
        try {
            JSONArray jsonArray = new JSONArray(json);
            for (int i = 0; i < jsonArray.length(); i++) {

                ChannelBean channelBean = null;

                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String isSelect = jsonObject.getString("isSelect");

                String name = null;
                if (isSelect.equals("true")) {
                    //为true添加给标签
                    name = jsonObject.getString("name");
                    tabs.add(name);
                    channelBean = new ChannelBean(name, true);


                } else {
                    name = jsonObject.getString("name");
                    channelBean = new ChannelBean(name, false);
                }
                //从新把数据添加给数据库
                dbDao.addData(channelBean);

            }
            //把标签给tablayout
            for (int i = 0; i < tabs.size(); i++) {
                tab.addTab(tab.newTab().setText( tabs.get(i)));


            }
            //创建适配器
            MainViewPagerAdapter adapter = new MainViewPagerAdapter(getSupportFragmentManager(), tabs);
            vp.setAdapter(adapter);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

Sql_Dao层写法:

public class DBDao {

    private final DBHelper helper;

    public DBDao(Context context) {
        helper = new DBHelper(context);
    }

    //添加
    public void addData(ChannelBean channelBean) {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", channelBean.getName());
        //可以储存boolean类型
        values.put("isSelect", channelBean.isSelect());
        db.insert("cache", null, values);
        db.close();
    }

    //查询
    public List<ChannelBean> queryData() {
        SQLiteDatabase db = helper.getWritableDatabase();
        List<ChannelBean> list = new ArrayList<>();
        Cursor cursor = db.query("cache", null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            ChannelBean channelBean = null;
            String name = cursor.getString(cursor.getColumnIndex("name"));
            //根据解析获取字段
            int anInt = cursor.getInt(2);
            //0代表是false
            if (anInt == 0) {
                channelBean = new ChannelBean(name, false);
                //1代表true
            } else {
                channelBean = new ChannelBean(name, true);
            }
            list.add(channelBean);
        }

        return list;
    }

    //删除
    public void delete() {
        SQLiteDatabase db = helper.getWritableDatabase();

        db.execSQL("delete from cache");

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/86513534
今日推荐