java - 我如何在 firebase 中自动递增一个值

标签 java android firebase increment

我目前正在开发一个应用程序,该应用程序使用 firebase 存储和 firebase 数据库下载文件以存储链接到存储的 url。 fire base 数据库树看起来有点像这样

应用程序 | 应用程序1 | 命名我的应用程序下载 1 网址 http://link去下载 关于关于您下载的应用程序 您下载的应用程序的图片图片网址 下载 = 0 | 应用程序2 (同上数据)

我有自定义基础适配器,它允许我添加图像 url 和 about 值。 当有人点击我列表中的项目时,它会下载并安装您选择的应用程序,方法是获取项目的位置,然后使用 httpget 从数据库中获取 url。

id 喜欢的是,当他们单击该项目时,它会自动将子下载量增加 1,因此它充当下载计数器。

 mrootRef = new Firebase("https://admob-app-id-3020090926.firebaseio.com/Apps");
    mlv = (ListView) findViewById(R.id.lvFilmapps);
    mrootRef.child("Filmapps").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            final String appname = dataSnapshot.child("name").getValue(String.class);
            final String url = dataSnapshot.child("url").getValue(String.class);
            final String apkname = dataSnapshot.child("apk").getValue(String.class);
            final String about = dataSnapshot.child("about").getValue(String.class);
            final String appimg = dataSnapshot.child("image").getValue(String.class);


            FilmArray.add(appname);
            urlList.add(url);
            ApkList.add(apkname);
            Aboutapp.add(about);
            appImage.add(appimg);

            //String[] convertion  for the BaseAdpater
            String[] arr = FilmArray.toArray(new String[FilmArray.size()]);
            String[] arr1 = Aboutapp.toArray(new String[Aboutapp.size()]);
            String[] arr2 = appImage.toArray(new String[appImage.size()]);

            mlv.setAdapter(new dataListAdapter(arr,arr1,arr2));
            new dataListAdapter(arr,arr1,arr2).notifyDataSetChanged();

            mlv.setOnItemClickListener(new AdapterView.OnItemClickListener() {


                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                     newnamestring = ApkList.get(i).toString();
                    apkNames = FilmArray.get(i).toString();
                    new DownloadFileFromURL().execute(urlList.get(i));
                }
            });
        }

最佳答案

我想您可能想看看Transaction。如果 reference 是您的 FirebaseReference 指向要递增的数字,您可以这样做:

reference.runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        if (mutableData.getValue() == null) {
            mutableData.setValue(1);
        } else {
            int count = mutableData.getValue(Integer.class);
            mutableData.setValue(count + 1);
        }
        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean success, DataSnapshot dataSnapshot) {
        // Analyse databaseError for any error during increment
    }
});

请注意,两个 Transaction 不能同时执行,因此您确定计数已正确更新。你可以有更多的细节here .

关于java - 我如何在 firebase 中自动递增一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41838131/

相关文章:

java - 从原始资源文本文件中读取

java - JDBC 分页

java - 枚举类型中的方法可以更改枚举实例的状态吗?

android - 使用哪个适配器?

java - 从 ListView 获取子项会导致 android.view.View android.view.View.findViewById(int) 出现空对象引用

java - 如何将数据从 firestore 添加到我的 spinner

java - Oauth v2 承载 token 具有 Oauth v1 属性

javascript - Electron:Firebase 和 Facebook 身份验证?

ios - 如何知道主题创建是否为 "submitted"到控制台(Firebase 云消息传递)

android - 如何在 android 上使 cordova 本地通知粘滞