简体   繁体   中英

How add timestamp on my recyclerview using firebase realtime database

How can I add timestamp on my database, and show to to recyclerview. This is where I would like to show the time

here are my codes

private void insertData(){

  String tricycleNumber = editTextTricycleNumber.getText().toString();
  String driver = editTextDriver.getText().toString();

  if(tricycleNumber.isEmpty()){
      editTextTricycleNumber.setError("Tricycle Body Number is required!");
      editTextTricycleNumber.requestFocus();
      return;
  }

  if(driver.isEmpty()){
      editTextDriver.setError("Driver's Name is required!");
      editTextDriver.requestFocus();
      return;
  }

  MainModel map = new MainModel(tricycleNumber,driver);

    FirebaseDatabase.getInstance().getReference().child("Queue").push()
            .setValue(map)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        Toast.makeText(profile_driver.this, "Tricyle On Queue.", Toast.LENGTH_SHORT).show();
                    }
                }
            });

}

}

MainModel

public class MainModel {

String tricycleNumber, driver;

public MainModel(){ }

public MainModel(String tricycleNumber, String driver) {
    this.tricycleNumber = tricycleNumber;
    this.driver = driver;
}

public String getTricycleNumber() {
    return tricycleNumber;
}

public void setTricycleNumber(String tricycleNumber) {
    this.tricycleNumber = tricycleNumber;
}

public String getDriver() {
    return driver;
}

public void setDriver(String driver) {
    this.driver = driver;
}

}

MainAdapter

public MainAdapter(@NonNull FirebaseRecyclerOptions options) { super(options);

}

@Override
protected void onBindViewHolder(@NonNull myViewHolder holder, @SuppressLint("RecyclerView") final int position, @NonNull MainModel model) {
    holder.tricycleNumber.setText(model.tricycleNumber);
    holder.driver.setText(model.driver);


    holder.btndepart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(holder.tricycleNumber.getContext());
            builder.setTitle("Tricycle is departing?");

            builder.setPositiveButton("Depart", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    FirebaseDatabase.getInstance().getReference().child("Queue")
                            .child(getRef(position).getKey()).removeValue();
                    Toast.makeText(holder.tricycleNumber.getContext(), "Tricycle has departed!", Toast.LENGTH_SHORT).show();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(holder.tricycleNumber.getContext(), "Cancelled!", Toast.LENGTH_SHORT).show();
                }
            });
            builder.show();
        }
    });

}

@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
    return new myViewHolder(view);
}

static class myViewHolder extends RecyclerView.ViewHolder{

    TextView tricycleNumber, driver, time;
    Button btndepart;

    public myViewHolder(@NonNull View itemView) {
        super(itemView);

        tricycleNumber = (TextView)itemView.findViewById(R.id.tnumber);
        driver = (TextView) itemView.findViewById(R.id.nametext);

        btndepart = (Button) itemView.findViewById(R.id.btndepart);
    }
}

}

How can I add timestamp on my database, and show to to recyclerview.

If you want to add the time of the addition of the MainModel object into the database, then you have to add a new property inside the class that looks like this:

public class MainModel {
    private String tricycleNumber, driver;
    private Map<String, String> timestamp; //👈

    public MainModel(){ }

    public MainModel(String tricycleNumber, String driver) {
        this.tricycleNumber = tricycleNumber;
        this.driver = driver;
    }

    public String getTricycleNumber() {
        return tricycleNumber;
    }

    public void setTricycleNumber(String tricycleNumber) {
        this.tricycleNumber = tricycleNumber;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    //👇
    public void setTimestamp(Map<String, String> timeStamp) {
        this.timestamp= timestamp;
    }

    //👇
    public Map<String, String> getTimestamp() {
        return timestamp;
    }
}

When you create an object of the class, simply pass ServerValue.TIMESTAMP as the third parameter to the constructor. One thing to mention is that the ServerValue.TIMESTAMP is just a token that the Realtime Database converts to a number on the server. The timestamp will only appear in the database after the write operation completes. So you also might consider attaching a complete listener to see when the operation completes.

However, if you already have added the data into the database, and you only want to perform an update, then the following lines of code are required:

Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
ref.child("yourNode").updateChildren(map);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM