Я занимаюсь разработкой чата с 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>