У меня есть страница погашения, где пользователь нажимает на элемент из FirebaseRecyclerView
, и появляется новое подробное действие.Здесь я добавил кнопку для погашения ваучера, я могу сохранить как время устройства, так и ServerValue.TIMESTAMP
в том месте, где я хочу его сохранить.
Моя цель:
Во-первых, получить время и дату, когда ваучер был в последний раз погашен, если он не был использован ранее, мне нужно, чтобы он был пустым.
Во-вторых, мне нужно, чтобы он запускался при нажатии на этот пост и проверял, не был ли он ранее погашен этим пользователем, чтобы не перепутать его с любым другим пользователем.
Моя структура Firebase выглядит следующим образом:
Root -> Users -> UID -> Key (генерируется, когда пользователь выкупает ваучер) -> поля, касающиеся сведений о купоне и time
который содержит время устройства в момент погашения и timestamp
, который является ServerValue.TIMESTAMP
. Любая помощь относительно логики или кода будет принята с благодарностью.
Вот моя деятельность PostDetailActivity.java
:
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ServerValue;
import com.squareup.picasso.Picasso;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
public class PostDetailActivity extends AppCompatActivity {
TextView mTitleTv, mDetailTv, mCategoryTv, mCallTv, rdmTxt;
ImageView mImageIv;
private static final String TAG = "PostDetailActivity";
String user;
String location;
DatabaseReference mRef;
String contact;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post_detail);
//Action Bar
ActionBar actionBar = getSupportActionBar();
// ActionBar title
actionBar.setTitle("Coupon Details");
// Set Back Button
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
// Initialise
mTitleTv = findViewById(R.id.titleTv);
mDetailTv = findViewById(R.id.descriptionTv);
mImageIv = findViewById(R.id.imageView);
mCategoryTv = findViewById(R.id.categoryTv);
rdmTxt = findViewById(R.id.rdmTxt);
mCallTv = findViewById(R.id.callTv);
// get data from intent
String image = getIntent().getStringExtra("image");
String title = getIntent().getStringExtra("title");
String desc = getIntent().getStringExtra("description");
String cate = getIntent().getStringExtra("category");
location = title;
String call = getIntent().getStringExtra("contact");
contact = call;
// Set Data to views
mTitleTv.setText(title);
mDetailTv.setText(desc);
mCategoryTv.setText(cate);
mCallTv.setText(call);
Picasso.get().load(image).into(mImageIv);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
public void redeem(View view) {
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to redeem the voucher?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
long date = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM MM dd, yyyy h:mm a");
String dateString = sdf.format(date);
mRef = FirebaseDatabase.getInstance().getReference("/User/" + FirebaseAuth.getInstance().getCurrentUser().getUid());
String key = mRef.push().getKey(); // this will create a new unique key
Map<String, Object> value = new HashMap<>();
value.put("location", location);
value.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
value.put("email", FirebaseAuth.getInstance().getCurrentUser().getEmail());
value.put("timestamp", ServerValue.TIMESTAMP);
value.put("time", dateString);
mRef.child(key).setValue(value);
// DatabaseReference mMasterRef = FirebaseDatabase.getInstance().getReference("/User/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/" + key + "/time");
// Log.d("mRef", mMasterRef.toString());
}
})
.setNegativeButton("No", null)
.show();
}
}