Firebase и Android - сохраняйте метку времени на сервере, а затем извлекайте ее обратно всякий раз, когда загружается действие - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть страница погашения, где пользователь нажимает на элемент из 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();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...