【发布时间】:2018-06-30 07:11:27
【问题描述】:
我是 android studio 和 firebase 的新手。 我正在尝试制作食物食谱应用程序。 现在,我在 firebase 中有一个以数组形式存在的成分列表。
我希望用户从现有列表中搜索他们不喜欢的成分。 为此,需要自动完成搜索。
我想要的是;
显示来自 firebase 的所有成分的应用程序。我该怎么做?
1234563和胡萝卜,当他输入 cu 时,它只显示黄瓜。他可以选择黄瓜并将这种成分放入“不喜欢列表”中。我该怎么做?
任何评论都会对我有所帮助。
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
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;
public class SearchActivity extends AppCompatActivity {
private EditText search;
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
search = (EditText) findViewById(R.id.search);
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
listview = (ListView) findViewById(R.id.listview1);
listview.setAdapter(adapter);
for (int i = 1; i < 40; i++) {
final String num = Integer.toString(i);
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference myRef = database.getReference().child("ingredients").child(num);
myRef.child("ingredients").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
String name = dataSnapshot.getValue().toString();
adapter.add(name);
} else {
System.out.println("nein");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String filterText = s.toString();
if(filterText.length()>0){
listview.setFilterText(filterText);
}else{
listview.clearTextFilter();
}
}
});
}
}
【问题讨论】:
-
你在上面提到的代码中遇到了什么问题?
-
该代码未从 firebase 获取成分列表
-
因为你需要共享firebase实时数据库的数据结构(firebase数据库成分节点值的截图)
标签: android firebase firebase-realtime-database