博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android客户端获取Firebase云数据
阅读量:7259 次
发布时间:2019-06-29

本文共 5361 字,大约阅读时间需要 17 分钟。

hot3.png

前言:

最近的新项目使用Firebase作为app的后台,即通过Firebase的sdk来获取Firestore(数据库)的实时数据。Firebase的Firestore是一种云托管数据库,该数据库将数据存储为 JSON,并以实时方式与每个连接的客户端同步。下面我简单总结一下在MVVM架构的项目中如何获取Firebase云数据。

用到的知识点:

1.FirebaseFirestore获取动态数据
2.Recyclerview+Adapter展示列表信息

实现的代码:

1.Google官网注册应用
   首先去网址:https://console.firebase.google.com/ 去注册自己的应用,并下载google-services.json的文件,把它放到项目的app/目录。

2.添加依赖

2.1 Project的build.gradle

        classpath 'com.google.gms:google-services:4.1.0'    
  2.2  Module的build.gradle
        dependencies {
        compile 'com.google.firebase:firebase-database:15.0.1'
        }
        apply plugin: 'com.google.gms.google-services'    //这一句一定要放在最下面,否则无效

3.在Firebase建立实时数据库

 

4.在LenderRepository里面封装FirebaseFirestore获取动态数据的方法

public class LenderRepository {    private static final String TAG = LenderRepository.class.getSimpleName();        /*     *封装一个FirebaseFirestore获取动态数据的方法     */    public void getLenderList(CompleteCallback
> callback) { CollectionReference loansRef = FirebaseFirestore.getInstance().collection(FIREBASE_COLLECT_LENDERS); loansRef.get() .addOnSuccessListener(queryDocumentSnapshots -> { ArrayList
lenders = new ArrayList<>(); if (!queryDocumentSnapshots.isEmpty()) { lenders.addAll(queryDocumentSnapshots.toObjects(Lender.class)); } callback.onComplete(null, lenders); }) .addOnFailureListener(e -> { callback.onComplete(AppError.parse(e.getCause()), null); }); }}

5.DependencyInjector的类

public class DependencyInjector {    // Repositories    private static LenderRepository sLenderRepo;    public static LenderRepository getsLenderRepository(){        if(sLenderRepo == null){            sLenderRepo = new LenderRepository();        }        return sLenderRepo;    }}

6.LenderViewModel的类

public class LenderViewModel extends PaddyViewModel {    private LenderRepository lenderRepository = DependencyInjector.getsLenderRepository();    public void getLenderList(CompleteCallback
> callback) { //判断是否有网络 if (!NetworkingManager.isNetworkConnected()) { callback.onComplete(AppError.NETWORK_CONNECTION, null); return; } lenderRepository.getLenderList(callback); }}

7.在LenderActivity调用FirebaseFirestore获取动态数据的方法

public class LenderActivity extends PaddyActivity {    private ActivityLenderBinding mBinding;    private LenderViewModel viewModel;    private LenderAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_lender);        viewModel = obtainViewModel(LenderViewModel.class);        setupViews();    }    private void setupViews() {        //调用FirebaseFirestore获取动态数据的方法        getLenderList();    }    /*     *调用FirebaseFirestore获取动态数据的方法     */    private void getLenderList() {        showLoading();        viewModel.getLenderList((error, lenders) -> {            if (error != null) {                hideLoading();                return;            }            setupLender(lenders);        });    }    private void setupLender(ArrayList
lenders) { adapter = new LenderAdapter(this, lenders); mBinding.rcvLenders.setLayoutManager(new GridLayoutManager(this, 2)); mBinding.rcvLenders.setAdapter(adapter); hideLoading(); } @Override protected PaddyViewModel getViewModel() { if (viewModel == null) { viewModel = obtainViewModel(LenderViewModel.class); } return viewModel; }}

8.适配器的代码

public class LenderAdapter extends RecyclerView.Adapter
{ private LayoutInflater mInflater; private ArrayList
lenderList = new ArrayList<>(); private Context context; public LenderAdapter(Context context,ArrayList
lenderList) { this.context=context; this.lenderList.addAll(lenderList); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (mInflater == null) { mInflater = LayoutInflater.from(parent.getContext()); } View itemView = mInflater.inflate(R.layout.item_lenders, parent, false); return new LenderAdapter.ViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull LenderAdapter.ViewHolder holder, int position) { String logo_url = lenderList.get(position).getLogo(); setLenderImage(logo_url, holder.imvLender); String name = lenderList.get(position).getName(); holder.tvLender.setText(name); } private void setLenderImage(@NonNull String url, @NonNull ImageView imageView) { ImageUtil.load(context, imageView, url); } @Override public int getItemCount() { return lenderList.size(); } class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.imv_lender) ImageView imvLender; @BindView(R.id.tv_lender) TextView tvLender; ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } }}

9.总结:

Android客户端获取Firebase云数据的功能已经实现啦,如果大家有什么疑问的话,欢迎留言联系我哦!

转载于:https://my.oschina.net/wupeilin/blog/2876737

你可能感兴趣的文章