当我尝试从 firebase 更新数据时出错
Error when i try to update data from firebase
我想使用我的应用程序从 firebase 更新一些数据,但是当我提交它时,数据只会重复,不会更改,而且不知道为什么。我把我的代码放在下面:
我的 class userPojo
package com.example.proyectofinaldanielsanchez;
import java.io.Serializable;
public class userPojo implements Serializable {
private String Tipo;
private String Titulo;
private String Avance;
private String Plataforma;
private String Key;
public userPojo() {
}
public userPojo(String Tipo, String Titulo, String Avance, String Plataforma){
this.Tipo=Tipo;
this.Titulo=Titulo;
this.Avance=Avance;
this.Plataforma=Plataforma;
}
public String getTipo() {
return Tipo;
}
public void setTipo(String Tipo) {
this.Tipo = Tipo;
}
public String getKey() {
return Key;
}
public void setKey(String Key) {
this.Key = Key;
}
public String getTitulo() {
return Titulo;
}
public void setTitulo(String Titulo) {
this.Titulo = Titulo;
}
public String getAvance() {
return Avance;
}
public void setAvance (String Avance) {
this.Avance = Avance;
}
public String getPlataforma() {
return Plataforma;
}
public void setPlataforma(String Plataforma) {
this.Plataforma = Plataforma;
}
}
Class 适配器:
package com.hellokh.sovary.firetest;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class RVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
private Context context;
ArrayList<Employee> list = new ArrayList<>();
public RVAdapter(Context ctx)
{
this.context = ctx;
}
public void setItems(ArrayList<Employee> emp)
{
list.addAll(emp);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);
return new EmployeeVH(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position)
{
Employee e = null;
this.onBindViewHolder(holder,position,e);
}
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, Employee e)
{
EmployeeVH vh = (EmployeeVH) holder;
Employee emp = e==null? list.get(position):e;
vh.txt_name.setText(emp.getName());
vh.txt_position.setText(emp.getPosition());
vh.txt_option.setOnClickListener(v->
{
PopupMenu popupMenu =new PopupMenu(context,vh.txt_option);
popupMenu.inflate(R.menu.option_menu);
popupMenu.setOnMenuItemClickListener(item->
{
switch (item.getItemId())
{
case R.id.menu_edit:
Intent intent=new Intent(context,MainActivity.class);
intent.putExtra("EDIT",emp);
context.startActivity(intent);
break;
case R.id.menu_remove:
DAOEmployee dao=new DAOEmployee();
dao.remove(emp.getKey()).addOnSuccessListener(suc->
{
Toast.makeText(context, "Record is removed", Toast.LENGTH_SHORT).show();
notifyItemRemoved(position);
list.remove(emp);
}).addOnFailureListener(er->
{
Toast.makeText(context, ""+er.getMessage(), Toast.LENGTH_SHORT).show();
});
break;
}
return false;
});
popupMenu.show();
});
}
@Override
public int getItemCount()
{
return list.size();
}
}
Class 存档:
package com.example.proyectofinaldanielsanchez;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.HashMap;
import java.util.Map;
public class Archivos extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_archivos2);
final EditText edit_tipo = findViewById(R.id.edit_tipo);
final EditText edit_titulo = findViewById(R.id.edit_titulo);
final EditText edit_avance=findViewById(R.id.edit_avance);
final EditText edit_plataforma=findViewById(R.id.edit_plataforma);
Button btn = findViewById(R.id.btn_submit);
Button btn_open = findViewById(R.id.btn_open);
btn_open.setOnClickListener(v->
{
Intent intent =new Intent(Archivos.this, Visualizar.class);
startActivity(intent);
});
DAOUserPojo dao =new DAOUserPojo();
userPojo user_edit = (userPojo) getIntent().getSerializableExtra("EDIT");
if(user_edit !=null)
{
btn.setText("UPDATE");
edit_tipo.setText(user_edit.getTipo());
edit_titulo.setText(user_edit.getTitulo());
edit_avance.setText(user_edit.getAvance());
edit_plataforma.setText(user_edit.getPlataforma());
btn_open.setVisibility(View.GONE);
}
else
{
btn.setText("SUBMIT");
btn_open.setVisibility(View.VISIBLE);
}
btn.setOnClickListener(v->
{
userPojo user = new userPojo(edit_tipo.getText().toString(), edit_titulo.getText().toString(),edit_avance.getText().toString(),edit_plataforma.getText().toString());
if(user_edit==null)
{
dao.add(user).addOnSuccessListener(suc ->
{
Toast.makeText(this, "Record is inserted", Toast.LENGTH_SHORT).show();
}).addOnFailureListener(er ->
{
Toast.makeText(this, "" + er.getMessage(), Toast.LENGTH_SHORT).show();
});
}
else
{
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("tipo", edit_tipo.getText().toString());
hashMap.put("titulo", edit_titulo.getText().toString());
hashMap.put("avance", edit_avance.getText().toString());
hashMap.put("plataforma", edit_plataforma.getText().toString());
dao.update(user_edit.getKey(), hashMap).addOnSuccessListener(suc ->
{
Toast.makeText(this, "Record is updated", Toast.LENGTH_SHORT).show();
finish();
}).addOnFailureListener(er ->
{
Toast.makeText(this, "" + er.getMessage(), Toast.LENGTH_SHORT).show();
});
}
});
}
}
classDAOUserPojo
public class DAOUserPojo {
private DatabaseReference databaseReference;
private FirebaseAuth userid;
public DAOUserPojo() {
FirebaseDatabase db =FirebaseDatabase.getInstance("https://proyecto-daniel-sanchez-default-rtdb.europe-west1.firebasedatabase.app");
databaseReference = db.getReference();
userid = FirebaseAuth.getInstance();
// userid=FirebaseAuth.getInstance().getCurrentUser();
}
public Task<Void> add(userPojo user)
{
return databaseReference.child(userid.getUid()).push().setValue(user);
}
public Task<Void> update(String Key, HashMap<String ,Object> hashMap)
{
return databaseReference.child(userid.getUid()).child(Key).updateChildren(hashMap);
}
public Task<Void> remove(String Key)
{
return databaseReference.child(userid.getUid()).child(Key).removeValue();
}
public Query get(String Key)
{
if(Key == null)
{
return databaseReference.child(userid.getUid()).orderByKey().limitToFirst(8);
}
return databaseReference.child(userid.getUid()).orderByKey().startAfter(Key).limitToFirst(8);
}
public Query get()
{
return databaseReference;
}
}
这是我尝试更新时数据库的节点。它应该像第一个节点,但它重复了:firebase
抱歉我的英语不好。如果有人能提供帮助,那就太好了,谢谢!
让我们开始上传新的:
我建议添加额外的 child
lets name is id
例如,此 child 的值将与 firebase push id 的值相同。
让我们开始编辑:
为适配器传递一个(字符串)textId
变量,这样当您从菜单中单击编辑时,它会将 textId 值设置为来自 firebase 的推送 ID,即 child 有您需要编辑的数据。
现在使用 child(textId).updateChildren(//Your hashmap);
它会起作用。
我的用法示例:
String textId= productRef.child(UID).child("images").push().getKey();
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", textId);
productRef.child(UID).child("images").child(textId).updateChildren(hashMap);
你有没有注意到 id 与 Child 名称相同
我想使用我的应用程序从 firebase 更新一些数据,但是当我提交它时,数据只会重复,不会更改,而且不知道为什么。我把我的代码放在下面:
我的 class userPojo
package com.example.proyectofinaldanielsanchez;
import java.io.Serializable;
public class userPojo implements Serializable {
private String Tipo;
private String Titulo;
private String Avance;
private String Plataforma;
private String Key;
public userPojo() {
}
public userPojo(String Tipo, String Titulo, String Avance, String Plataforma){
this.Tipo=Tipo;
this.Titulo=Titulo;
this.Avance=Avance;
this.Plataforma=Plataforma;
}
public String getTipo() {
return Tipo;
}
public void setTipo(String Tipo) {
this.Tipo = Tipo;
}
public String getKey() {
return Key;
}
public void setKey(String Key) {
this.Key = Key;
}
public String getTitulo() {
return Titulo;
}
public void setTitulo(String Titulo) {
this.Titulo = Titulo;
}
public String getAvance() {
return Avance;
}
public void setAvance (String Avance) {
this.Avance = Avance;
}
public String getPlataforma() {
return Plataforma;
}
public void setPlataforma(String Plataforma) {
this.Plataforma = Plataforma;
}
}
Class 适配器:
package com.hellokh.sovary.firetest;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class RVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
private Context context;
ArrayList<Employee> list = new ArrayList<>();
public RVAdapter(Context ctx)
{
this.context = ctx;
}
public void setItems(ArrayList<Employee> emp)
{
list.addAll(emp);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);
return new EmployeeVH(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position)
{
Employee e = null;
this.onBindViewHolder(holder,position,e);
}
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, Employee e)
{
EmployeeVH vh = (EmployeeVH) holder;
Employee emp = e==null? list.get(position):e;
vh.txt_name.setText(emp.getName());
vh.txt_position.setText(emp.getPosition());
vh.txt_option.setOnClickListener(v->
{
PopupMenu popupMenu =new PopupMenu(context,vh.txt_option);
popupMenu.inflate(R.menu.option_menu);
popupMenu.setOnMenuItemClickListener(item->
{
switch (item.getItemId())
{
case R.id.menu_edit:
Intent intent=new Intent(context,MainActivity.class);
intent.putExtra("EDIT",emp);
context.startActivity(intent);
break;
case R.id.menu_remove:
DAOEmployee dao=new DAOEmployee();
dao.remove(emp.getKey()).addOnSuccessListener(suc->
{
Toast.makeText(context, "Record is removed", Toast.LENGTH_SHORT).show();
notifyItemRemoved(position);
list.remove(emp);
}).addOnFailureListener(er->
{
Toast.makeText(context, ""+er.getMessage(), Toast.LENGTH_SHORT).show();
});
break;
}
return false;
});
popupMenu.show();
});
}
@Override
public int getItemCount()
{
return list.size();
}
}
Class 存档:
package com.example.proyectofinaldanielsanchez;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.HashMap;
import java.util.Map;
public class Archivos extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_archivos2);
final EditText edit_tipo = findViewById(R.id.edit_tipo);
final EditText edit_titulo = findViewById(R.id.edit_titulo);
final EditText edit_avance=findViewById(R.id.edit_avance);
final EditText edit_plataforma=findViewById(R.id.edit_plataforma);
Button btn = findViewById(R.id.btn_submit);
Button btn_open = findViewById(R.id.btn_open);
btn_open.setOnClickListener(v->
{
Intent intent =new Intent(Archivos.this, Visualizar.class);
startActivity(intent);
});
DAOUserPojo dao =new DAOUserPojo();
userPojo user_edit = (userPojo) getIntent().getSerializableExtra("EDIT");
if(user_edit !=null)
{
btn.setText("UPDATE");
edit_tipo.setText(user_edit.getTipo());
edit_titulo.setText(user_edit.getTitulo());
edit_avance.setText(user_edit.getAvance());
edit_plataforma.setText(user_edit.getPlataforma());
btn_open.setVisibility(View.GONE);
}
else
{
btn.setText("SUBMIT");
btn_open.setVisibility(View.VISIBLE);
}
btn.setOnClickListener(v->
{
userPojo user = new userPojo(edit_tipo.getText().toString(), edit_titulo.getText().toString(),edit_avance.getText().toString(),edit_plataforma.getText().toString());
if(user_edit==null)
{
dao.add(user).addOnSuccessListener(suc ->
{
Toast.makeText(this, "Record is inserted", Toast.LENGTH_SHORT).show();
}).addOnFailureListener(er ->
{
Toast.makeText(this, "" + er.getMessage(), Toast.LENGTH_SHORT).show();
});
}
else
{
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("tipo", edit_tipo.getText().toString());
hashMap.put("titulo", edit_titulo.getText().toString());
hashMap.put("avance", edit_avance.getText().toString());
hashMap.put("plataforma", edit_plataforma.getText().toString());
dao.update(user_edit.getKey(), hashMap).addOnSuccessListener(suc ->
{
Toast.makeText(this, "Record is updated", Toast.LENGTH_SHORT).show();
finish();
}).addOnFailureListener(er ->
{
Toast.makeText(this, "" + er.getMessage(), Toast.LENGTH_SHORT).show();
});
}
});
}
}
classDAOUserPojo
public class DAOUserPojo {
private DatabaseReference databaseReference;
private FirebaseAuth userid;
public DAOUserPojo() {
FirebaseDatabase db =FirebaseDatabase.getInstance("https://proyecto-daniel-sanchez-default-rtdb.europe-west1.firebasedatabase.app");
databaseReference = db.getReference();
userid = FirebaseAuth.getInstance();
// userid=FirebaseAuth.getInstance().getCurrentUser();
}
public Task<Void> add(userPojo user)
{
return databaseReference.child(userid.getUid()).push().setValue(user);
}
public Task<Void> update(String Key, HashMap<String ,Object> hashMap)
{
return databaseReference.child(userid.getUid()).child(Key).updateChildren(hashMap);
}
public Task<Void> remove(String Key)
{
return databaseReference.child(userid.getUid()).child(Key).removeValue();
}
public Query get(String Key)
{
if(Key == null)
{
return databaseReference.child(userid.getUid()).orderByKey().limitToFirst(8);
}
return databaseReference.child(userid.getUid()).orderByKey().startAfter(Key).limitToFirst(8);
}
public Query get()
{
return databaseReference;
}
}
这是我尝试更新时数据库的节点。它应该像第一个节点,但它重复了:firebase 抱歉我的英语不好。如果有人能提供帮助,那就太好了,谢谢!
让我们开始上传新的:
我建议添加额外的 child
lets name is id
例如,此 child 的值将与 firebase push id 的值相同。
让我们开始编辑:
为适配器传递一个(字符串)textId
变量,这样当您从菜单中单击编辑时,它会将 textId 值设置为来自 firebase 的推送 ID,即 child 有您需要编辑的数据。
现在使用 child(textId).updateChildren(//Your hashmap);
它会起作用。
我的用法示例:
String textId= productRef.child(UID).child("images").push().getKey();
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", textId);
productRef.child(UID).child("images").child(textId).updateChildren(hashMap);
你有没有注意到 id 与 Child 名称相同