Firebase数据库到Spinner [代码清理帮助] [英] Firebase database to Spinner [code cleaning help]

查看:178
本文介绍了Firebase数据库到Spinner [代码清理帮助]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

数据试图访问





我试图将所有数据库的值存储到微调器中。最终的结果应该是显示一个微调的所有值。代码是以某种方式实现的,但是我觉得在 spinnerData()函数中需要进行一些清理。

注意:代码完全正常工作,但实际上它在 spinnerData()中使用了太多的对象和太多的值传递,如果可以实现用一些简单的代码就可以了。



SymptomActivity.java

  package com.example.nishantsikri.microdoctor; 

导入android.content.Intent;
导入android.os.Bundle;
导入android.support.design.widget.FloatingActionButton;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppCompatActivity;
导入android.support.v7.widget.Toolbar;
导入android.util.Log;
导入android.view.View;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.Spinner;
导入android.widget.TextView;

导入android.widget.Toast;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class SymptomActivity extends AppCompatActivity {
$ b $ private DatabaseReference mFirebaseDatabase,spinnerDatabase;
私有FirebaseDatabase mFirebaseInstance;
按钮按钮;
TextView textView;
Spinner旋转器;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_symptom);
工具栏工具栏=(工具栏)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

button =(Button)findViewById(R.id.button8);
textView =(TextView)findViewById(R.id.textView2);

spinner =(微调)findViewById(R.id.spinner2);

FloatingActionButton fab =(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Snackbar.make(view,Replace with your own action ,Snackbar.LENGTH_LONG)
.setAction(Action,null).show();
}
});
FirebaseDatabase.getInstance()。setPersistenceEnabled(true);


//写一条消息到数据库
mFirebaseInstance = FirebaseDatabase.getInstance();
//将应用标题存储为'app_title'节点
mFirebaseInstance.getReference(app_title)。setValue(microDoctor);
mFirebaseDatabase = mFirebaseInstance.getReference(symptomList);
spinnerDatabase = mFirebaseInstance.getReference(symptomView);
//mFirebaseDatabase.child(\"Headache\").child(\"Some Value)。setValue(Head);
//mFirebaseDatabase.setValue(\"Headache);

spinnerData();

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
}
});

$ b private void readDataListener(){
mFirebaseDatabase.child(Abdominal Cramps)。child(Diarrhea)。child(Vomiting)。addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
症状症状= dataSnapshot.getValue(Symptom.class);

//检查($症状==空){
Log.e(数据,症状数据为空!);
返回;
}

Log.e(Symptom Data,User data is changed!+ symptom.getDisease());

//显示新更新的名称和电子邮件
textView.setText (symptom.symptom1 +\ n+ symptom.symptom2 +\ n+ symptom.symptom3 +\\\
+ symptom.disease +\\\
+ dataSnapshot.getKey());
}

@Override
public void onCancelled(DatabaseError error){
//失败d值
Log.e(Error,Failed to read user,error.toException());
}
});

private void spinnerData(){
spinnerDatabase.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){

Log.e(Spinner Data,Spinner data is changed!);

DataSnapshot data = dataSnapshot;
Iterable< DataSnapshot> temp = data.getChildren() ;
ArrayList< String> list = new ArrayList<>();
// list.add(dataSnapshot.getValue()。toString());
// showDataInSpinner(list) ;
for(DataSnapshot lists:temp){
Log.d(ddd,Array List:+ lists.getValue()。toString());
list.add lists.getValue()。toString());
textView.setText(lists.getValue()。toString());
}
showDataInSpinner(list);

}

@Override
public void onCancell ed(DatabaseError错误){
//读取值失败
Log.e(Error,Failed to read user,error.toException());
}
});
}
public void showDataInSpinner(ArrayList< String> data){
ArrayAdapter< String> adapter = new ArrayAdapter<>(
this,android.R.layout.simple_spinner_item,data
); //创建适配器来设置数据
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //设置布局资源来创建下拉视图。
spinner.setAdapter(adapter); //将数据设置为您的微调框


code $ $ $ $ $ $ $ $ $ $ $ $ $解析方案

你的代码很好,但是只有一件事情需要删除。您不需要将 dataSnapshot 对象分配给新的DataSnapshot对象。你可以直接使用 dataSnapshot 。所以删除新创建的对象,并在代码中只使用 dataSnapshot


Data Trying to access

I'm trying to store all the values of database to a spinner. Final result should be to show all values in a spinner. Code is implemented somehow but I feel that there is some cleaning required in spinnerData() function.

Note: Code is fully working but the fact is that it is using too much objects and too many passing of values in spinnerData() and if it can be achieved with some simpler code that would be great.

SymptomActivity.java

package com.example.nishantsikri.microdoctor;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;

import android.widget.Toast;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class SymptomActivity extends AppCompatActivity {

private DatabaseReference mFirebaseDatabase, spinnerDatabase;
private FirebaseDatabase mFirebaseInstance;
Button button;
TextView textView;
Spinner spinner;

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

    button = (Button) findViewById(R.id.button8);
    textView = (TextView) findViewById(R.id.textView2);

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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);


    // Write a message to the database
    mFirebaseInstance = FirebaseDatabase.getInstance();
    // store app title to 'app_title' node
    mFirebaseInstance.getReference("app_title").setValue("microDoctor");
    mFirebaseDatabase = mFirebaseInstance.getReference("symptomList");
    spinnerDatabase = mFirebaseInstance.getReference("symptomView");
    //mFirebaseDatabase.child("Headache").child("Some Value").setValue("Head");
    //mFirebaseDatabase.setValue("Headache");

    spinnerData();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });
}

private void readDataListener() {
    mFirebaseDatabase.child("Abdominal Cramps").child("Diarrhea").child("Vomiting").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Symptom symptom = dataSnapshot.getValue(Symptom.class);

            // Check for null
            if (symptom == null) {
                Log.e("Data", "Symptom data is null!");
                return;
            }

            Log.e("Symptom Data", "User data is changed!"+symptom.getDisease());

            // Display newly updated name and email
            textView.setText(symptom.symptom1+"\n"+symptom.symptom2+"\n"+symptom.symptom3+"\n"+symptom.disease+"\n"+dataSnapshot.getKey());
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.e("Error", "Failed to read user", error.toException());
        }
    });
}
private void spinnerData() {
    spinnerDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Log.e("Spinner Data", "Spinner data is changed!");

            DataSnapshot data = dataSnapshot;
            Iterable<DataSnapshot> temp = data.getChildren();
            ArrayList<String> list = new ArrayList<>();
//                list.add(dataSnapshot.getValue().toString());
//                showDataInSpinner(list);
            for (DataSnapshot lists : temp){
                Log.d("ddd","Array List: "+lists.getValue().toString());
                list.add(lists.getValue().toString());
                textView.setText(lists.getValue().toString());
            }
            showDataInSpinner(list);

        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.e("Error", "Failed to read user", error.toException());
        }
    });
}
public void showDataInSpinner(ArrayList<String> data) {
    ArrayAdapter<String> adapter = new ArrayAdapter<>(
            this, android.R.layout.simple_spinner_item, data
    ); //Create the Adapter to set the data
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Set the layout resource to create the drop down views.
    spinner.setAdapter(adapter); //Set the data to your spinner
}
}

解决方案

Your code is fine, but there is only one thing that you need to remove. You don't need to assign the dataSnapshot object to a new DataSnapshot object. You can easely use dataSnapshot directly. So remove the new created object and use only dataSnapshot in your code.

这篇关于Firebase数据库到Spinner [代码清理帮助]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆