Java 有没有办法将表格行保存到Firebase中?实时还是Firestore?
我制作了这个移动应用程序,可以在按下按钮后添加表格行。每行包含一个Edittext、四个下拉菜单(微调器)和一个删除行的按钮。按下“添加”按钮后,每一行都像一个副本。现在,我唯一的问题是如何将特定内容保存到firebase的实时数据库或firestore中。你们有没有关于如何做到这一点的建议,有什么资源,或者这个问题很广泛?我可以具体说明一些你感到困惑的事情 我可以保存一个包含文档标题的编辑文本,它成功地工作,除了表行,因为它包含多种数据类型。我刚听说firebase只能保存原始数据类型 这是与问题相关的代码,因此我不必粘贴所有357行代码Java 有没有办法将表格行保存到Firebase中?实时还是Firestore?,java,android,firebase,Java,Android,Firebase,我制作了这个移动应用程序,可以在按下按钮后添加表格行。每行包含一个Edittext、四个下拉菜单(微调器)和一个删除行的按钮。按下“添加”按钮后,每一行都像一个副本。现在,我唯一的问题是如何将特定内容保存到firebase的实时数据库或firestore中。你们有没有关于如何做到这一点的建议,有什么资源,或者这个问题很广泛?我可以具体说明一些你感到困惑的事情 我可以保存一个包含文档标题的编辑文本,它成功地工作,除了表行,因为它包含多种数据类型。我刚听说firebase只能保存原始数据类型 这是与
private android.support.v7.widget.Toolbar maintoolbar, editToolBar;
private FirebaseAuth mAuth;
private FloatingActionButton fab;
private RelativeLayout layoutMain;
private RelativeLayout layoutButtons;
private RelativeLayout layoutContent;
private boolean isOpen = false;
private Button addnewRowButton, saveItButton;
private EditText titleofDoc;
private Context context = null;
private ProgressBar pb;
private DatabaseReference dr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
dr = FirebaseDatabase.getInstance().getReference().child("Notes").child(mAuth.getCurrentUser().getUid());
maintoolbar = findViewById(R.id.mainToolBar);
setSupportActionBar(maintoolbar);
getSupportActionBar().setTitle("Files");
layoutMain = findViewById(R.id.mainLays);
layoutButtons = findViewById(R.id.layoutButtons);
layoutContent = findViewById(R.id.layoutContent);
addnewRowButton = findViewById(R.id.AddRow);
saveItButton = findViewById(R.id.SaveThis);
titleofDoc = findViewById(R.id.TitleofDoc);
editToolBar = findViewById(R.id.main_edit_toolbar);
pb = findViewById(R.id.progressBar2);
saveItButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String title = titleofDoc.getText().toString().trim();
if (!TextUtils.isEmpty(title)) {
pb.setVisibility(View.VISIBLE);
createNew(title);
pb.setVisibility(View.INVISIBLE);
} else {
Snackbar.make(v, "Fill Empty Fields", Snackbar.LENGTH_SHORT).show();
pb.setVisibility(View.INVISIBLE);
}
}
});
addnewRowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addNewRow();
}
});
fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewMenu();
}
});
}
这是生成表行的方法
private void addNewRow() {
final TableLayout tl = findViewById(R.id.tbllays);
String[] teamRoles = {"Director", "Marketing", "Team", "All"};
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, teamRoles);
context = getApplicationContext();
//adds new row
final TableRow tbr = new TableRow(context);
TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
tbr.setLayoutParams(layoutParams);
//add edittext to name the task
EditText editText = new EditText(context);
editText.setHint("Add Task");
tbr.addView(editText, 0);
//add spinner to assign teams
Spinner toDo = new Spinner(context);
toDo.setAdapter(adapter);
tbr.addView(toDo, 1);
//add spinner to assign teams
Spinner InProgress = new Spinner(context);
InProgress.setAdapter(adapter);
tbr.addView(InProgress, 2);
//add spinner to assign teams
Spinner Test = new Spinner(context);
Test.setAdapter(adapter);
tbr.addView(Test, 3);
//add spinner to assign teams
Spinner Done = new Spinner(context);
Done.setAdapter(adapter);
tbr.addView(Done, 4);
// Add a button in the second column
Button button = new Button(context);
button.setText("X");
tbr.addView(button, 5);
button.setBackgroundColor(Color.rgb(159, 168, 218));
// Get delete table row button.
Button deleteRowButton = (Button) button;
deleteRowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tbr.removeAllViews();
}
});
tl.addView(tbr);
}
private void addNewRow(){
最终表格布局tl=findViewById(R.id.Tblays);
字符串[]teamRoles={“主管”、“营销”、“团队”、“所有”};
最终ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u spinner\u dropdown\u项目,teamRoles);
context=getApplicationContext();
//添加新行
最终表格行tbr=新表格行(上下文);
TableRow.LayoutParams LayoutParams=新建TableRow.LayoutParams(TableRow.LayoutParams.WRAP_内容);
tbr.setLayoutParams(layoutParams);
//添加edittext以命名任务
EditText EditText=新的EditText(上下文);
setHint(“添加任务”);
tbr.addView(编辑文本,0);
//添加微调器以分配团队
微调器toDo=新微调器(上下文);
toDo.setAdapter(适配器);
待审查添加视图(toDo,1);
//添加微调器以分配团队
微调器InProgress=新微调器(上下文);
进程设置适配器(适配器);
待审查添加视图(正在进行中,2);
//添加微调器以分配团队
微调器测试=新微调器(上下文);
测试。设置适配器(适配器);
待审查添加视图(测试,3);
//添加微调器以分配团队
微调器完成=新微调器(上下文);
完成。设置适配器(适配器);
待审查添加视图(完成,4);
//在第二列中添加一个按钮
按钮按钮=新按钮(上下文);
按钮设置文本(“X”);
tbr.添加视图(按钮,5);
setBackgroundColor(Color.rgb(159、168、218));
//获取删除表行按钮。
按钮deleteRowButton=(按钮)按钮;
deleteRowButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
tbr.removeAllViews();
}
});
tl.addView(待定);
}
这是一种只能保存标题而不是内容(本例中为表行)的方法
private void createNew(字符串标题){
if(mAuth.getCurrentUser()!=null){
最终数据库引用newThingRef=dr.push();
final Map thingMap=new HashMap();
放置(“标题”,标题);
thingMap.put(“timestamp”,ServerValue.timestamp);
线程mainThread=新线程(newrunnable(){
@凌驾
公开募捐{
newThingRef.setValue(thingMap).addOnCompleteListener(newOnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(MainActivity.this,“添加注释”,Toast.LENGTH_SHORT.show();
Intent maintent=新的Intent(MainActivity.this、MainActivity.class);
星触觉(主旨);
}否则{
字符串错误=task.getException().getMessage();
Toast.makeText(MainActivity.this,“ERROR:+ERROR,Toast.LENGTH_LONG).show();
}
}
});
}
});
mainThread.start();
}否则{…}
}
这是xml文件(保存编辑器的部分)
您需要在每个微调器的末尾添加一个侦听器,并将其存储在变量中,例如:
Spinner Done = new Spinner(context);
Done.setAdapter(adapter);
Done.setOnItemSelectedListner(this)
tbr.addView(Done, 4);
然后使用DatabaseReference存储此变量。您需要在每个微调器的末尾添加一个侦听器并存储在变量中,例如:
Spinner Done = new Spinner(context);
Done.setAdapter(adapter);
Done.setOnItemSelectedListner(this)
tbr.addView(Done, 4);
然后使用DatabaseReference存储此变量。实际上,如果不想保存行,则要保存基础内容
不要将屏幕上的行视为内容本身,而应将它们视为仅显示您的底层内容。此基础内容可以备份、修改,而屏幕上的显示可以随时完全重建
要转换代码,我建议执行以下一系列步骤:
创建一个类似于任务
类的类,该类包含所需的所有字段(例如名称
,团队
)
在当前活动/片段类中存储任务的列表,例如私有列表myTasks
编写一个方法displayTasks
,从布局中删除所有现有行,然后遍历myTasks
并将它们全部绘制到屏幕上
更改addNewRow
,以便将新的任务添加到myTasks
,然后调用displayTasks
现在,您有了一个任务列表,这些任务可以在以后检索
我完全知道这个答案不是你想要的简单的“只做x”,而是你真正需要的答案!所有步骤都非常简单
Spinner Done = new Spinner(context);
Done.setAdapter(adapter);
Done.setOnItemSelectedListner(this)
tbr.addView(Done, 4);