Firebase в реальном времени номер Android - PullRequest
0 голосов
/ 26 июня 2018

Я занимаюсь разработкой чата с firebase. На самом деле я отправляю аудио между устройствами, сохраняю их в хранилище ("new_audio" + number + ". Mp3") и сохраняю этот номер в базе данных реального времени (чтобы узнать, что было отправлено последним аудио) С помощью следующего кода я могу получить последний номер, а после этого (при загрузке аудио) дать ему еще 1 (номер ++). Когда я запускаю чат с пользователем, номер извлекается без проблем, но когда чат открыт, и Пользователь1 отправляет аудио (new_audio3.mp3), а Пользователь2 отправляет другое аудио после того, как этот номер не извлекается (Используйте тот же номер аудио ! new_audio3.mp3). Короче говоря, обновленный номер не получен одновременно другим устройством , он работает только тогда, когда чат был недавно открыт.

String audiosURL = "https://xxxxx.firebaseio.com/audios/" + UserDetails.username + "_" + UserDetails.chatWith +"/audiosEnviados.json";
    StringRequest request = new StringRequest(Request.Method.GET, audiosURL, new Response.Listener<String>(){
        @Override
        public void onResponse(String s) {
            try{
                int numero = Integer.parseInt(s.trim());
                System.out.println("------NUMERO DESDE BD------ "+numero);
                if (numero > 0) {
                    numeroJson = numero;
                } else {
                    numeroJson = -1;
                    //numeroJson = 0;
                }
            }catch(Exception E){
                numeroJson = 0;
            }

            reference1.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Map map = dataSnapshot.getValue(Map.class);
                    String message = map.get("message").toString();
                    String userName = map.get("users").toString();

                    final String url = "https://xxxxx.firebaseio.com/users/"+UserDetails.username+"/amigos.json";
                    //ASIGNA EL NOMBRE DE AMIGO EN LA BARRA HEADER CHAT SEGÚN SU ANDROID ID
                    StringRequest requestAmigo = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String s) {
                            try {
                                JSONObject obj = new JSONObject(s);
                                Iterator i = obj.keys();
                                String key = "";
                                String keyNick = "";

                                while(i.hasNext()) {
                                    key = i.next().toString();
                                    if(!key.equals(UserDetails.username)) {
                                        try {
                                            keyNick = obj.get(key).toString();
                                            if(UserDetails.chatWith.equals(key)){
                                                //UserDetails.chatWith = keyNick;
                                                headerArea.setText(keyNick);
                                                Typeface custom_font = Typeface.createFromAsset(getAssets(),  "fonts/Minecrafter.Reg.ttf");
                                                headerArea.setTypeface(custom_font);
                                            }
                                        } catch (JSONException e) {
                                            // Something went wrong!
                                        }
                                    }
                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {
                            System.out.println("" + volleyError);
                            //OJO COMENTE DISMISSSS
                            //pd.dismiss();
                        }
                    });

                    RequestQueue rQueueAmigos = Volley.newRequestQueue(Chat.this);
                    rQueueAmigos.add(requestAmigo);

                    if(userName.equals(UserDetails.username)){
                        //addMessageBox("  Tú:\n" + "  "+message + " \n", 1); el correcto
                        //addMessageBox(" Tú:\n" + " "+message + " \n \n", 1);
                        addMessageBox("  "+message + " \n", 1);
                    }
                    else{
                        //addMessageBox("  "+UserDetails.chatWith + ":\n" + "  "+message + " \n", 2); EL CORRECTO
                        //addMessageBox(" "+UserDetails.chatWith + ":\n" +" "+ message + " \n \n", 2);
                        addMessageBox("  "+message + " \n", 2);
                    }
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        }
    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            System.out.println("" + volleyError);
        }
    });

    RequestQueue rQueue = Volley.newRequestQueue(Chat.this);
    rQueue.add(request);

Загрузить аудио и сохранить номер (база данных в реальном времени):

private void uploadAudio(){

        mProgress.setMessage("Enviando grabación ...");
        mProgress.show();

        System.out.println("NUMERO Antes de SUBIR JSON "+numeroJson);
        numeroJson++;
        StorageReference filepath = mStorage.child("Audio").child(UserDetails.username + "_" + UserDetails.chatWith).child("new_audio"+numeroJson+".mp3");
        System.out.println("NUMERO AL SUBIR JSON "+numeroJson);
        //SUBE NUMERO DE AUDIOS A SU LISTA
        Firebase reference = new Firebase("https://xxxxx.firebaseio.com/audios/"+UserDetails.username + "_" + UserDetails.chatWith);
        reference.child("audiosEnviados").setValue(numeroJson);
        //SUBE NUMERO DE AUDIOS A LA LISTA DEL AMIGO
        Firebase reference2 = new Firebase("https://xxxxx.firebaseio.com/audios/"+UserDetails.chatWith + "_" + UserDetails.username);
        reference2.child("audiosEnviados").setValue(numeroJson);

        System.out.println("fpath "+filepath);
        System.out.println("filename "+mFileName);

        Uri uri = Uri.fromFile(new File(dirTest+"/recorded_audio.mp3"));

        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                mProgress.dismiss();
            }
        });
    }

Я надеюсь, что кто-то знает, как получать номер каждый раз, когда аудио получают / отправляют в чате, СПАСИБО <3! </p>

...