Firebase Cloud Firestore останавливает приложение при вставке - PullRequest
0 голосов
/ 31 мая 2018

У меня странная проблема.Когда я пытаюсь добавить данные в свою базу данных, приложение полностью зависает.Я отладил подпрограммы Firestore и, похоже, застрял в методе add(Object).

Это код, который я вызываю для вставки данных:

public void addArmaOficial(Arma data) {
        if (data != null)
            db.collection(Constants.COLLECTION_BASE)
                    .document(Constants.COLLECTION_ARMAS)
                    .collection(Constants.COLLECTION_OFIARM)
                    .add(data)   ///< It get's stucked here
                    .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                        @Override
                        public void onSuccess(DocumentReference documentReference) {
                            Toast.makeText(ctx, R.string.accionexistosa, Toast.LENGTH_SHORT).show();
                            ctx.finish();
                        }
                    })
                    .addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentReference> task) {
                            Toast.makeText(ctx, R.string.addarmaoficialtoast, Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            e.printStackTrace();
                        }
                    });
        else
            Toast.makeText(ctx, "Los datos son nulos", Toast.LENGTH_SHORT).show();
    }

Iне понимаю, почему это происходит.Есть небольшая выдержка из класса "Arma":

public class Arma extends Equipo implements Parcelable {
    private String dano;
    private String tipo_dano;
    private ArrayList<Prop_Arma> propiedades;
    private String categoria_princ;
    private String categoria_secun;
    private String notas;
    private float distancaimed, distanciamax;
    private int mods;
///< Constructor, getters and setters, and parcelable implementation done automatically
}

И класса "Prop_Arma":

public class Prop_Arma implements Parcelable {
    private String nombre;
    private boolean dano_var;
    private String descripcion;
    private boolean distancia;
    private boolean grande, muygrande, gigante, gargantuesca;
///< The same as previous, constructors, getters and setters, and the Parcelable implementation done automatically
}

Дело в том, что он застревает и не говорит об ошибке.Это как что-то работает, но я не знаю что.Кроме того, я сделал обновление меток времени в своем коде, поэтому я не думаю, что это может быть проблемой.

UPDATE 1

Это код, из которого он был назван методомaddArmaOficial(Arma data):

public void Guardar(boolean flag) {
        if (arma_nueva.getPropiedades() == null && !flag) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.nopropmessage)
                    .setTitle(R.string.nopropmesstit);

            builder.setNegativeButton(R.string.cancelar, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Toast.makeText(CrearArma.this, "Operación cancelada...", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .setPositiveButton(R.string.continuar, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Guardar(true);
                        }
                    });

            AlertDialog dialog = builder.create();
            dialog.show();
        } else {
            arma_nueva.setNombre(((EditText) findViewById(R.id.nombre)).getText().toString());
            if(!Objects.equals(((EditText) findViewById(R.id.peso)).getText().toString(), ""))
                arma_nueva.setPeso(Float.parseFloat(((EditText) findViewById(R.id.peso)).getText().toString()));
            if(!Objects.equals(((EditText) findViewById(R.id.costePC)).getText().toString(), ""))
                arma_nueva.setPc(Integer.parseInt(((EditText) findViewById(R.id.costePC)).getText().toString()));
            if(!Objects.equals(((EditText) findViewById(R.id.costePP)).getText().toString(), ""))
                arma_nueva.setPp(Integer.parseInt(((EditText) findViewById(R.id.costePP)).getText().toString()));
            if(!Objects.equals(((EditText) findViewById(R.id.costePO)).getText().toString(), ""))
                arma_nueva.setPo(Integer.parseInt(((EditText) findViewById(R.id.costePO)).getText().toString()));
            arma_nueva.setDano(((Spinner)findViewById(R.id.dano)).getSelectedItem().toString());
            arma_nueva.setTipo_dano(tip_dano_spin.getSelectedItem().toString());
            arma_nueva.setCategoria_princ(cats_spin.getSelectedItem().toString());
            arma_nueva.setCategoria_secun(tips_spin.getSelectedItem().toString());
            if(!Objects.equals(((EditText) findViewById(R.id.distmed)).getText().toString(), ""))
                arma_nueva.setDistancaimed(Float.parseFloat(((EditText)findViewById(R.id.distmed)).getText().toString()));
            if(!Objects.equals(((EditText) findViewById(R.id.distmax)).getText().toString(), ""))
                arma_nueva.setDistanciamax(Float.parseFloat(((EditText)findViewById(R.id.distmax)).getText().toString()));
            if(!Objects.equals(((EditText) findViewById(R.id.mods)).getText().toString(), ""))
                arma_nueva.setMods(Integer.parseInt(((EditText)findViewById(R.id.mods)).getText().toString()));
            DBConnector db = new DBConnector(this);
            db.addArmaOficial(arma_nueva);
        }
    }

Это внутри класса, объявленного как:

public class CrearArma extends AppCompatActivity {
///...
}

1 Ответ

0 голосов
/ 31 мая 2018

Что ж, я наконец-то нашел проблему!

Это была не база данных о пожарах, не то, как она была отправлена, а просто ресурс, который не может быть найден.Просто некоторые строки, которые я заменил на строки, не являющиеся строками, и это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...