Android数据存储(五)——简单的Json应用

在完成前面几步的操作后,大致得到了一个创建数据库,添加表格,以及简单的增删改查等功能,然后借助RecyclerView的列表显示把数据库的内容显示出来。接下来对列表项进行一个小小的改动,点击Item进入详情展示的页面,长按Item对列表项进行删除,这里的删除仅仅涉及到列表的删除,并没有对数据库进行删除。要实现对数据库删除就调用之前的数据库工具类进行操作。在详情展示的页面用到的数据是从适配器里面传递过来的,简介的内容用一个JSON文件进行解析,然后显示到一个TextView里面。

一、 为Item添加监听事件

这一步需要在RecyclerView的适配器里面进行,也可以写一个接口,然后提供一个方法给Activity调用,通过复写接口的方法进行事件监听和响应。
我用的方法是在适配器里面直接对Item进行监听,然后重写点击的方法,在适配器代码中进行修改,代码如下:

public void removeItem(int position){
        list.remove (position);
        notifyItemRemoved (position);
    }
@NonNull
    @Override
    public BookHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from (parent.getContext ()).inflate (R.layout.layout_item,parent,false);
        final BookHolder bookHolder = new BookHolder (view);
        bookHolder.itemView.setOnClickListener (new View.OnClickListener () {//对Item进行事件监听
            @Override
            public void onClick(View view) {//点击Item触发事件,跳转到详情页,并传递该View的值
                //Toast.makeText (view.getContext (),"点击",Toast.LENGTH_SHORT).show ();
                Intent intent = new Intent (new Intent (view.getContext (),DetailsActivity.class));
                String imgUrl = list.get (bookHolder.getAdapterPosition ()).getImgUrl ();
                Bundle bundle = new Bundle ();
                bundle.putString ("image",imgUrl);
                bundle.putString ("name",(String) bookHolder.tvBookName.getText ());
                bundle.putString ("author",(String)bookHolder.tvBookAuthor.getText ());
                intent.putExtras (bundle);
                view.getContext ().startActivity (intent);
            }
        });

        bookHolder.itemView.setOnLongClickListener (new View.OnLongClickListener () {
            @Override
            public boolean onLongClick(View view) {//长按触发移除事件
                removeItem (bookHolder.getAdapterPosition ());
                Toast.makeText (view.getContext (),"长按删除",Toast.LENGTH_SHORT).show ();
                return false;
            }
        });
        return bookHolder;
    }

新建一个Activity或者Fragment用于显示详情页,详情页分为两个部分,头部分显示图片,作者,书名,用的是从适配器获得的数据,下部分详情显示用的是Json数据里面的数据;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_details);
        initView ();
        Bundle bundle = getIntent ().getExtras ();
        DetailImage = bundle.getString ("image");
        DetailName = bundle.getString ("name");
        DetailAuthor = bundle.getString ("author");
        Glide.with (this).load (DetailImage).into (ivDetailImage);
        getBook ();
        setInfo (books);
        tvDetailName.setText (DetailName);
        tvDetailAuthor.setText (DetailAuthor);

    }

二、 对JSON数据进行解析和显示

1. 新建一个本地文本来保存JSON数据

首先进一个资源文件夹assets


新建文件夹

JSON数据内容

[
  {
    "name": "《红楼梦》",
    "info": "《红楼梦》,中国古代章回体长篇小说,又名《石头记》《金玉缘》,被列为中国古典四大名著之首,一般认为是清代作家曹雪芹 所著。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,描绘了一批举止见识出于须眉之上的闺阁佳人们的人生百态,展现了正邪两赋有情人的人性美和悲剧美,可以说是一部从各个角度展现女性美的史诗。"
  },
  {
    "name": "《西游记》",
    "info": "《西游记》是中国古代第一部浪漫主义章回体长篇神魔小说。现存明刊百回本《西游记》均无作者署名。清代学者吴玉搢等首先提出《西游记》作者是明代吴承恩。这部小说以“唐僧取经”这一历史事件为蓝本,通过作者的艺术加工,深刻地描绘了当时的社会现实。全书主要描写了孙悟空出世及大闹天宫后,遇见了唐僧、猪八戒和沙僧三人,西行取经,一路降妖伏魔,经历了九九八十一难,终于到达西天见到如来佛祖,最终五圣成真的故事。"
  },
  {
    "name": "《三国演义》",
    "info": "《三国演义》是中国古典四大名著之一,是中国第一部长篇章回体历史演义小说,全名为《三国志通俗演义》(又称《三国志演义》),作者是元末明初的著名小说家罗贯中。《三国志通俗演义》成书后有嘉靖壬午本等多个版本传于世,到了明末清初,毛宗岗对《三国演义》整顿回目、修正文辞、改换诗文。"
  },
  {
    "name": "《水浒传》",
    "info": "《水浒传》,中国四大名著之一,是一部以北宋末年宋江起义为主要故事背景、类型上属于英雄传奇的章回体长篇小说。全书通过描写梁山好汉反抗欺压、水泊梁山壮大和受宋朝招安,以及受招安后为宋朝征战,最终消亡的宏大故事,艺术地反映了中国历史上宋江起义从发生、发展直至失败的全过程,深刻揭示了起义的社会根源,满腔热情地歌颂了起义英雄的反抗斗争和他们的社会理想,也具体揭示了起义失败的内在历史原因。 "
  }
]

2. 新建一个Book类用来保存json数据

public class Book {
    private String name;
    private String info;
    public Book(String name, String info) {
        this.name = name;
        this.info = info;
    }
    //Getter and Setter

在详情Activity添加解析JSON用到的方法

public void getBook(){
        String result = getJson ("book.txt");
        try {
            JSONArray json = new JSONArray(result);
            for(int i=0;i list){
        if(list != null){
            for (int i =0;i

三、 效果展示

image.png

image.png

image.png

你可能感兴趣的:(Android数据存储(五)——简单的Json应用)