数据展示+传值+存数据库

Retrofit+EventBus+GreenDao+MVP简单小总结 这篇博客主要就是Retrofit,GreenDao,EventBus, ButterKnife,Fresco和MVP的一个知识的小总结 阅读详情

用到的依赖

大build

classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'

implementation 'com.facebook.fresco:fresco:1.2.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.android.support:recyclerview-v7:28.0.0-beta01'
implementation 'de.greenrobot:eventbus:3.0.0-beta1'
apply plugin: 'org.greenrobot.greendao'
  greendao {

        schemaVersion 1
        daoPackage 'com.bwei.greendao.gen'
        targetGenDir 'src/main/java'
    }
    implementation'org.greenrobot:greendao:3.0.1'
    implementation'org.greenrobot:greendao-generator:3.0.0'

 

第一个页面

1.xml

<TextView
    android:id="@+id/textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="151dp"
    android:text="Hello World!"
    android:textSize="30dp" />

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/sdv"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:layout_centerInParent="true"
    app:roundAsCircle="true"
    app:roundedCornerRadius="90dp" />

2.activity

public class MainActivity extends AppCompatActivity {
    TextView textView;
    SimpleDraweeView simpleDraweeView;
    String path="https://img2.woyaogexing.com/2018/07/30/b2773d0e982efa66!400x400_big.jpg";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册
        EventBus.getDefault().register(this);

        textView=findViewById(R.id.textview);
        simpleDraweeView=findViewById(R.id.sdv);
        Uri uri=Uri.parse(path);
        simpleDraweeView.setImageURI(uri);

        simpleDraweeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent it=new Intent(MainActivity.this,ShowActivity.class);
                startActivity(it);
            }
        });

    }

    @Subscribe(threadMode = ThreadMode.MainThread)
    public void getMsg(Chuan bean) {
        textView.setText(bean.title);
        simpleDraweeView.setImageURI(bean.url);
    }
}

数据展示

1.model层

1》

public class User {
    /**
     * _id : 5b63cd4e9d21225e0d3f58c9
     * createdAt : 2018-08-03T11:34:38.672Z
     * desc : 2018-08-03
     * publishedAt : 2018-08-03T00:00:00.0Z
     * source : api
     * type : 福利
     * url : https://ww1.sinaimg.cn/large/0065oQSqgy1ftwcw4f4a5j30sg10j1g9.jpg
     * used : true
     * who : lijinshan
     */

    public String _id;
    public String createdAt;
    public String desc;
    public String publishedAt;
    public String source;
    public String type;
    public String url;
    public boolean used;
    public String who;

}

2》

public class UserData {
    public List<User> results;
}

3.ITask

public interface ITask {
    public void getUserList(String url, OkCallback callback);
}

4》Task

public class Task implements ITask {
    @Override
    public void getUserList(String url, OkCallback callback) {
        OK.getOk().doGet(url,callback);
    }
}

2.Presenter

1>基类

public interface BasePre {
    void onDestroy();
}

2》Ipre

public interface IPresenter extends BasePre{
    public void getData();
}

3>MyPresenter

public class MyPresenter implements IPresenter {
    Task task;
    IView view;

    public MyPresenter(ShowActivity activity){
        task = new Task();
        view=activity;
    }
    @Override
    public void getData() {
        task.getUserList("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new OkCallback() {
            @Override
            public void onUI(String json) {
                Log.i("TAG",json);
                Gson gson=new Gson();
                UserData userData = gson.fromJson(json, UserData.class);
                view.getUser(userData.results);
            }

            @Override
            public void onFailed(String json) {

            }
        });
    }

    @Override
    public void onDestroy() {
        view=null;
    }
}

3.View

1>.IView

public interface IView {
    public void getUser(List<User> users);
}

2>.适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.TextHolder> {
    private Context context;
    private List<User> list;
    private OnItemClickListener onItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

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

    public void addData(List<User> users){
        list.addAll(users);
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public TextHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(context).inflate(R.layout.item_user,viewGroup,false);
        return new TextHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull TextHolder textHolder, int i) {
        final User user=list.get(i);
        Uri uri=Uri.parse(user.url);
        textHolder.user_img.setImageURI(uri);
        textHolder.user_name.setText(user.who);
        textHolder.user_desc.setText(user.desc);
        textHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (onItemClickListener!=null){
                    onItemClickListener.getdata(user.url,user.who);
                }
            }
        });
    }

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

    class TextHolder extends RecyclerView.ViewHolder{
        ImageView user_img;
        TextView user_name,user_desc;
      public TextHolder(@NonNull View itemView) {
          super(itemView);
          user_img=itemView.findViewById(R.id.user_img);
          user_name=itemView.findViewById(R.id.user_name);
          user_desc=itemView.findViewById(R.id.user_desc);
      }
  }

  public interface  OnItemClickListener{
        void getdata(String url,String title);
  }
}

4.xml

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>

2>.展示条目的数据

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/user_img"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginStart="14dp"
    android:layout_marginTop="14dp"
    app:roundAsCircle="true"
    app:roundedCornerRadius="90dp"
    android:background="@mipmap/ic_launcher" />

<TextView
    android:id="@+id/user_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignTop="@+id/user_img"
    android:layout_marginStart="129dp"
    android:text="TextView"
    android:textSize="22dp"
    android:textColor="#000"
    />

<TextView
    android:id="@+id/user_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/user_img"
    android:layout_alignStart="@+id/user_name"
    android:text="TextView"
    android:textColor="#000"
    android:textSize="18dp" />

5.展示数据的activity

public class ShowActivity extends AppCompatActivity implements IView{

    RecyclerView recyclerView;
    MyPresenter presenter;
    MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);

        recyclerView=findViewById(R.id.recyclerview);

        presenter=new MyPresenter(this);
        presenter.getData();

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.addItemDecoration(new DividerItemDecoration(this, OrientationHelper.VERTICAL));
        adapter=new MyAdapter(this);
        recyclerView.setAdapter(adapter);

        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void getdata(String url, String title) {
                EventBus.getDefault().post(new Chuan(url,title));
                finish();
            }
        });


    }

    @Override
    public void getUser(List<User> users) {
        adapter.addData(users);
    }
}

6.传值

1.要传的属性类

@Entity
public class Chuan {
    @Id(autoincrement = true)
    public Long id;
    public String url;
    public String title;

    public Chuan(String url, String title) {
        this.title = title;
        this.url = url;
    }
    public Chuan() {
    }
    @Generated(hash = 95212819)
    public Chuan(Long id, String url, String title) {
        this.id = id;
        this.url = url;
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

2.接收值

public class MainActivity extends AppCompatActivity {
    TextView textView;
    SimpleDraweeView simpleDraweeView;
    String path="https://img2.woyaogexing.com/2018/07/30/b2773d0e982efa66!400x400_big.jpg";
    private ChuanDao chuanDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册
        EventBus.getDefault().register(this);

        textView=findViewById(R.id.textview);
        simpleDraweeView=findViewById(R.id.sdv);
        Uri uri=Uri.parse(path);
        simpleDraweeView.setImageURI(uri);

        simpleDraweeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent it=new Intent(MainActivity.this,ShowActivity.class);
                startActivity(it);
            }
        });
        DaoSession daoSession= MyApp.getSession();
        chuanDao=daoSession.getChuanDao();

    }

    @Subscribe(threadMode = ThreadMode.MainThread)
    public void getMsg(Chuan bean) {
        textView.setText(bean.title);
        simpleDraweeView.setImageURI(bean.url);

       Long id= bean.id;
       String title=bean.title;
       String url=bean.url;
       Chuan chuan=new Chuan(id,title,url);
       chuanDao.insert(chuan);
        List<Chuan> chuans=chuanDao.loadAll();
        for (int i=0;i<chuans.size();i++){
            Long data = chuans.get(i).getId();
            Log.i("TAG","数据库");
            Log.i("TAG",title+"数据库");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}

7.app

public class MyApp extends Application {
    private static MyApp app;
    private static DaoSession session;
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
        app=this;
        setDB();
    }

    private void setDB() {
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "user.db", null);
        SQLiteDatabase database = devOpenHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(database);
        session=daoMaster.newSession();

    }

    public static DaoSession getSession(){
        return session;
    }
}
数据仓库的架构与设计 公司之前的数据都是直接传到Hdfs上进行操作,没有一个数据仓库,趁着最近空出几台服务器,搭了个简陋的数据仓库,这里记录一下数据仓库的一些知识。涉及的主要内容有: 什么是数据仓库? 数据仓库的架构 数据仓库多维数据模型的设计 1. 什么是数据仓库1.1 数据仓库的概念官方定义数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。 阅读详情

相关推荐

深入探索数据库领域的数据仓库架构

本文旨在为读者提供关于数据仓库架构的全面理解,涵盖从传统数据仓库到现代云数据仓库的演进过程。我们将重点讨论数据仓库的设计原则、实现技术和最佳实践。文章首先介绍数据仓库的基本概念,然后深入探讨其架构设计,接着通过实际案例展示实现方法,最后讨论未来发展趋势。数据仓库(Data Warehouse): 面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持管理决策: 数据抽取、转换和加载的过程: 在线分析处理系统,支持复杂分析查询云数据仓库普及。

2502_91592937的博客 998

【Android开发】greenrobot三大开源利器详解(一)——EventBus

一、greenrobot介绍greenrobot相关信息较少,可以确信是一个开源组织。官网:http://greenrobot.org/。 greenrobot主要开发并维护了3个Android开源库,即greenDAO、EventBus、和Essentials。三个开源库都可以在GitHub上进行下载。本节讲解其中最著名的EventBus。二、EventBus概述EventBus的官方解释是:“

BrilliantEagle的专栏 1万+

Oracle DB执行闪回数据库

• 配置闪回数据库 • 执行闪回数据库操作 • 监视闪回数据库     闪回数据库 闪回数据库操作: • 作用类似于数据库的倒带按钮 • 可以在用户造成了逻辑数据损坏的情况下使用   闪回数据库 使用闪回数据库,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到那个时间的状态。因为不需要还原备份,所以此操作速度很快。可以使用此功能还原导致逻辑数据

一抹曦阳-Oracle 6628

京东的热搜(搜索)界面(GreenDao,EventBus,Butterknife)

1.先配置GreenDao,Butterknife和EventBus 1.在model的build中加入依赖 //greendao compile 'org.greenrobot:greendao:3.1.0' compile 'org.greenrobot:greendao-generator:3.0.0' //butterknife 黄油刀...

biggrand的博客 3482

近10年数据仓库演进之路,以及数据库学习建议

数据仓库 是面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 从数据角度,数据仓库更适合传统的数据库,离线采集,数据一般为结构化的,每天处理数据量不易超过TB集,数据仓库一般在数十T到几百T以内,数据仓库一般为满足内生的应用,满足内部决策支持分析需求。缺点就是海量数据存储计算存在瓶颈,无法支撑非结构化数据、实时数据计算;硬件设备成本也过高。 数据仓库的架构 从整体上来看,数据仓库体系架构可分为:数据采集层、数据计算层、数据服务层和数据应用层 数据采集层 数据

running_elephant的博客 3072

数据库领域数据仓库的可视化展示方案

数据仓库作为企业数据的重要存储和管理平台,积累了大量的业务数据。然而,这些数据若不能以直观、易懂的方式呈现,其价值就难以被充分挖掘和利用。数据仓库的可视化展示方案旨在将数据仓库中的数据以图形、图表、报表等可视化形式呈现给用户,帮助用户更快速、准确地理解数据,发现数据中的规律和趋势,从而做出更明智的决策。本方案的范围涵盖了从数据仓库中提取数据、对数据进行处理和转换,到选择合适的可视化工具和技术进行展示的整个过程。

2502_91592937的博客 1202

Retrofit xbanner greendao eventbus adapter XRecyclerView

##RetrofitUtil public class RetrofitUtil { private static RetrofitUtil instance; private final Retrofit retrofit; private RetrofitUtil() { HttpLoggingInterceptor httpLoggingInterc...

weixin_44022413的博客 204

使用 SQLite 数据库实现简单的数据管理系统

本项目的目的是利用 SQLite 数据库构建一个简单的数据管理系统。SQLite 是一种轻量级的嵌入式数据库,无需单独的服务器进程,非常适合小型应用程序。本数据管理系统将涵盖基本的数据操作,如数据的插入、查询、更新和删除,适用于需要对少量数据进行简单管理的场景,例如个人信息管理、小型业务数据记录等。本文将首先介绍 SQLite 的核心概念和相关联系,包括其架构和工作原理。接着详细讲解使用 Python 操作 SQLite 数据库的核心算法原理和具体步骤。

2502_91592937的博客 1405

Mybatis中值传递的三种方式

1.前言 本案例中,所用的的数据表,bean,Mybatis数据库配置,可以参考:https://blog.youkuaiyun.com/qq_32224047/article/details/107165157 2.值的传递 - Map传值 可以通过对象 获取 Map传递值,在配置文件中通过 #{} 或 ${}进行应用 userMapper.xml中的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-/

浅时光|初如梦 1745

GridView页面传值技巧揭秘

本文还有配套的精品资源,点击获取 简介:在ASP.NET Web应用开发中,GridView控件用于展示数据库数据。本文深入探讨了如何在用户与GridView交互时,通过多种页面传值技术有效地传递选中行的数据到其他页面或功能模块。包括QueryString、Session、Viewstate、TempData、Form Post、HiddenField等方法的介绍和实现。通...

weixin_42596011的博客 1078

实时显示数据库数据的手机APP

获取数据库数据并动态显示在APP 另外实现对数据分析功能用图表显示

一文搞懂什么是数据仓库(Data Warehouse)数据仓库与数据库区别有哪些?什么是元数据?

前期回顾: ⼤数据是如何产⽣的?大数据的特点是什么?什么是埋点?如何进行数据埋点?【超详细介绍】 对于这么多种类,这么大体量的数据是如何存储的呢? 所以数据仓库就应景而生了。 目录数据仓库(数据是如何存储的)1 什么是数据仓库?2 数据仓库解决什么问题?3 数据仓库的主要特征4 数据仓库与数据库区别5 数据仓库架构6 数据仓库元数据管理什么是元数据?元数据具体的工作内容元数据分为技术元数据和业务元数据7 数据治理脏数据的种类数据治理原则知识拓展(数据集市)结束语 数据仓库(数据是如何存储的) 1 什么是数据

w0714的博客 5万+

android中传参的几种写法

这是第一个主活动窗口代码,非常容易,就几句代码解雇你的需求,

聊一聊数据库的行存与列存

好多人最开始学习数据库的时候,是关系数据库,数据以表格形式存储,一行表示一条记录。其实这种就是典型的行存储,将表按行存储到磁盘分区上。而一些数据库还支持列存储,它将表按列存储到磁盘分区上。.........

Gauss松鼠会 1万+

android访问数据库数据并图文显示

访问数据库中的多张图片,并且显示在android手机上。web端的应用本次不上传。

【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变

本文深入剖析了RuoYi框架定时任务模块从早期版本无校验到引入黑白名单机制,再到被组合利用实现RCE的完整漏洞演变过程。文章详细分析了SQL注入与定时任务功能结合导致的远程代码执行漏洞,并总结了代码审计与安全开发的核心要点,为开发者提供了重要的安全参考。

yellow的专栏 699

列存数据仓库怎样更高效

采用列存可以只读取需要的列,在总列数较多、计算涉及的列较少时,能减少硬盘访问量,提高性能。但仅此还不够,列存数据仓库还要在数据压缩、多线程并行和查找计算等方面做优化以将列存的效果做到最佳。开源数据计算引擎SPL充分利用数据有序存储的特征,在保持低 CPU 消耗的前提下,实现了较高压缩率的压缩算法,大幅减少了物理存储量,进一步提高了性能。SPL还提供倍增分段机制,解决了列存分段难题,让列存数据也能充分利用并行计算来提高效率。并且,SPL能够自由建立行存、列存数据表,允许开发者自主选择使用,且提供了带值索引。

白大锅的博客,毕设WangLoveBai_999 1208

直流有刷电机控制 - 认识电机(一)

电机控制学习

u011030644的博客 917

数据仓库建模和分层

数据仓库的分层,建模理论的选择,事实表的分类,维度表的分类,数据仓库的构建

m0_57697768的博客 1万+

python123题目——个税计算器

类型:简单分支。

m0_62488776的博客 5803

YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 730

直接保存对象的数据库——db4o

在实际开发中,数据的存储是必不可少的,常用的有数据库存储和文件存储。数据库目前有关系型数据库和文档型数据库(No-SQL)。关系型数据库以字段、类型、约束、表关系来存储和管理数据,比较常见的比如Oracle、MySql等都属于RDBMS,文档型数据库是一种可分布式的文档结构数据库,没有关系型数据库中传统意义上的表,比较常见的比如MongoDB、CouchDB等。 今天主要介绍下,在java开发中

Ryan's zone 8593

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 279
上一篇: 购物车
下一篇: Banner轮播图(网络接口实现)
Android_ZMY
博客等级 码龄8年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值