2017-01-24 10 views
0

firebaseストレージとFirebaseデータベースを使用してファイルをダウンロードするアプリケーションで現在作業中のimは、ストレージへのURLリンクを保存します。火災ベースデータベースツリーはこのように少し見えるfirebaseの値を自動インクリメントする方法

Apps | app1 | 名前あなたは ダウンロード= 0 をダウンロードするアプリのダウンロード 画像画像のURLのアプリについてについて をダウンロードするために私のアプリのダウンロード1 URL http://link | app2 (上記と同じデータ)

私はイメージのURLと約値を追加できるカスタムベースアダプタを持っています。 誰かが自分のリスト内のアイテムをクリックすると、アイテムの位置を把握し、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)); 
       } 
      }); 
     } 
+0

最も簡単な方法は、おそらくあなたは、人々が同時に同じ時間にダウンロードすることが予想される場合、その後、あなたがしたいかもしれませんが、)(、現在のダウンロード数を取得するためにAddListenerForSingleValueEventを使用し、その1つを追加し、setValueのでそれを保存することです彼の弁護士に言及された@ TheSunshinatorとしてのトランザクションを見てください。私は@TheSunshinatorはイム外観を持っているつもりフォーラムを閲覧されたとして、私は実際にこの方法を見ていた – Linxy

答えて

1

Transactionをご覧ください。 2つのTransaction sが同時に実行することはできませんので、あなたはカウントがあることを確信していることを

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 
    } 
}); 

注:referenceがインクリメントされる番号を指し、あなたのFirebaseReferenceであれば、あなたはこのような何かを行うことができます正しく更新されました。詳細はhereです。

+0

おかげで今、あなたは、私が参照を指すことになり –

+0

感謝を掲示しておきますか?私は子供の "url"でそれを指摘すれば、何回かクリックしたURLを毎回数えると思った。それはしますが、それはすべてのURLを数えます。つまり、個々のアプリではなく、アプリのダウンロードごとに表示されます。どうすればこの問題を解決できますか?ユーザーがログインしている場合 –

+0

上記の方法に見に行くにも感謝ええイム@Linxy –

関連する問題