Добавьте второй Spinner базы данных и отобразите его в TextView - PullRequest
0 голосов
/ 04 июня 2018

Я хочу создать приложение, в которое вы можете добавить имя и фамилию через базу данных Firebase.С помощью кнопки вы можете добавить имя, оно сохраняется в базе данных и с помощью счетчика вы можете выбрать его.

код:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, AdapterView.OnItemSelectedListener {

DatabaseReference db;
FirebaseHelper helper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    Spinner sp = (Spinner) findViewById(R.id.spinner);

    //SETUP FB
    db = FirebaseDatabase.getInstance().getReference();
    helper = new FirebaseHelper(db);

    sp.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,helper.retrieve()));

    Button fab = (Button) findViewById(R.id.btnAdd1);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            displayInputDialog();
        }
    });

 (...)

//DISPLAY INPUT DILAOG
private void displayInputDialog()
{
    Dialog d=new Dialog(this);
    d.setTitle("Firebase database");
    d.setContentView(R.layout.input_dialog);

    final EditText nameTxt = (EditText) d.findViewById(R.id.nameEditText);
    Button saveBtn = (Button) d.findViewById(R.id.saveBtn);

    //SAVE
    saveBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //GET DATA
            String name = nameTxt.getText().toString();

            //set data
            FirstWord s = new FirstWord();
            s.setName(name);

            //SAVE
            if(name != null && name.length()>0) {
                if(helper.save(s)) {
                    nameTxt.setText("");
                }
            }else {
                Toast.makeText(MainActivity.this, "Name Cannot Be Empty", Toast.LENGTH_SHORT).show();
            }
        }
    });
    d.show();
}

Класс Firebasehelper:

public class FirebaseHelper {

DatabaseReference db;
Boolean saved = null;


public FirebaseHelper (DatabaseReference db) {
    this.db = db;
}

public Boolean save(FirstWord firstWord) {
    if(firstWord == null) {
        saved = false;
    } else {
        try {
            db.child("FirstWord").push().setValue(firstWord);
            saved = true;
        } catch (DatabaseException e) {
            e.printStackTrace();
            saved = false;
        }
    }

    return saved;
}

//READ

public ArrayList<String> retrieve() {

    final ArrayList<String> spacecrafts = new ArrayList<>();

    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot, spacecrafts);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot, spacecrafts);
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return spacecrafts;
}

private void fetchData (DataSnapshot snapshot, ArrayList<String> spacecrafts) {
    spacecrafts.clear();
    for(DataSnapshot ds:snapshot.getChildren()) {
        String name = ds.getValue(FirstWord.class).getName();
        spacecrafts.add(name);
    }

}
}

Затем у меня есть также Firstname.class для получения и установки имени.

Я могу добавить имя, база данных показывает имя, и с помощью счетчика я могу выбрать его.

Теперь у меня два вопроса.

  • Как добавить второй счетчик с другой записью в базе данных?когда я добавляю второй счетчик, создайте тот же метод displayInputDialog (назовите его displayInputDialog2 и, конечно, измените все переменные) и создайте два новых класса (secondname.class и firebasehelper2.class), при этом счетчик всегда показывает либо базу данных имени, либо базу данных второго имени.,Поэтому я добавляю имя, база данных добавляет одну запись, и оба счетчика показывают это.Когда я добавляю второе имя, база данных добавляет две записи, и оба счетчика показывают две записи (дважды одно и то же имя)

Вот записи базы данных

{
  "FirstName" : {
    "-LE5yfrJR8CwMLxROhAr" : {
      "name" : "Hi"
    },
    "-LE61Zklt9LJbbaltoYE" : {
      "name" : "Hello "
    },
    "-LE6MGTBmPk7y57J9c03" : {
      "name" : "Hey "
    }
  },
  "SecondName" : {
    "-LE6-tJx6lxNpsLYjUSk" : {
      "name" : "log ",
      "name2" : "log "
    },
  }
}
  • Как я могу добавить элемент вращения в TextView?

Как здесь:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    final TextView viewn = (TextView)findViewById(R.id.show2);

    switch(parent.getId()) {          
        case R.id.spinner2:
            String itemSecond = parent.getItemAtPosition(position).toString();

            Toast.makeText(parent.getContext(), "Selected: " + itemSecond, Toast.LENGTH_SHORT).show();

            viewn.setText(itemSecond);
    }

Заранее спасибо!И очень жаль за длинный текст и все коды.

привет

...