Android, не могу инициализировать объект после запроса данных из Firebase - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь сделать простую браузерную игру в старом стиле, такую ​​как Tanoth / OGame, но на Android. Я использую базу данных Cloud Fire Store, но у меня есть проблема. После входа в систему я передаю в строку String, содержащую имя персонажа пользователя. После этого я хочу получить мой объект PGCharacter из базы данных простым запросом. В начале класса я объявляю переменную PGCharacter, но не инициализирую ее.

В методе onCreate я инициализирую базу данных и коллекцию, в которой хранятся все мои символы. Я создаю ссылку на документ с помощью ExtraString in Intent, поскольку все мои идентификаторы документов совпадают с именами пользователей проигрывателя. После этого я делаю запрос, и если я нахожу снимок, я хочу инициализировать мой объект PGCharacter с моим результатом Снимка. Проблема в том, что каждый раз, когда я хочу напечатать что-то из моего Объекта, он падает. Надеюсь, я хорошо объяснил проблему. Как я могу решить это? Я даже пытался добавить внешнюю функцию, но она не работала. PS для моих тестов я использую уже существующий плеер

Вот мой код класса:

package com.github.albertocoder97.archadia;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;

public class CharacterActivity extends AppCompatActivity {

private FirebaseFirestore db;
private CollectionReference characterCollection;

private PGCharacter pgCharacter;

private TextView usernameTextView;
private TextView goldTextView;
private TextView gemsTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_character);

    //Initialize the database
    db = FirebaseFirestore.getInstance();
    //Get characters database
    characterCollection = db.collection("characters");

    Intent intent = getIntent();
    String characterName = intent.getStringExtra("CHARACTER_NAME");

    Log.i("myFilter", "Intent input: " + characterName);

    //Initializing PGCharacter Object
    DocumentReference charDocReference = characterCollection.document(characterName);
    Log.i("myFilter", "ID: " + charDocReference.getId());
    charDocReference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            Log.i("myFilter", "Inner Gold DocumentSnapshot: " + documentSnapshot.get("gold").toString());
            setPGCharacter(documentSnapshot);
        }
    });

}




public void setPGCharacter(DocumentSnapshot snapshot){
    PGCharacter temp = snapshot.toObject(PGCharacter.class);
    pgCharacter = temp;
}

}

P.P.s я попытался войти в систему snapshot.getData (), и я получаю все мои данные PGCharacter, если кто-нибудь спросит, в моем классе PGCharacter у меня есть открытый пустой конструктор и все get для каждого свойства.

1 Ответ

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

Удалить эту строку

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