Как проверить, нажал ли пользователь кнопку несколько раз? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть два узла, пользователи и задания. В приложении, которое я разрабатываю, пользователь может подать заявку на работу. Когда пользователь подает заявку на задание, сведения о примененном задании будут отображаться под узлом пользователей. То, что я пытаюсь сделать, - это избегать того, чтобы пользователь подавал заявку на одну и ту же работу более одного раза. Когда они снова пытаются подать заявку на ту же работу, появляется тост, сообщающий, что они уже подали заявку на эту работу. Мне удалось заставить его работать как-то , но это не совсем то, что я ожидаю.

С моим текущим кодом вот что происходит:

  • Пользователь подает заявку на задание 1 в первый раз -> Тостовое сообщение не появляется (ожидается)
  • Пользователь применяется к заданию 1 во второй раз -> появляется всплывающее сообщение с указанием уже примененного пользователя (ожидается)
  • Пользователь относится к задание 2 в первый раз -> появляется всплывающее сообщение о том, что пользователь уже применен (НЕ ожидается)

Я не понимаю, почему это происходит. Логотип c, который я использую, кажется правильным, но я где-то ошибаюсь. Это работает в первый раз, но не во второй раз.

Это мой код:

  package com.example.oddsynew.Home;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import com.example.oddsynew.Gigs.MyGigs;
import com.example.oddsynew.R;
import com.google.android.material.navigation.NavigationView;
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.Query;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

public class JobInfo extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    TextView jobName, jobCharge, jobLocation, jobDate, jobTime, jobDesc, jobTasks, addPref, recruiterName;
    ImageView profPic;
    String jobname, jobloc, jobcharge, profpic, startdate, enddate, starttime, endtime, jobdesc, jobtasks, addpref, recruitername, userID;
    ImageButton menuIcon;
    Button requestForHireBtn;
    DatabaseReference rootRef, appliedJobsRef, jobNameRef;
    FirebaseAuth mAuth;
    FirebaseUser u;
    DrawerLayout drawer;
    NavigationView navigationView;
    Query query;
    Boolean clicked;
    int jobID;
    //Job job;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_job_info);

        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        menuIcon = (ImageButton) findViewById(R.id.menuIcon);
        requestForHireBtn = (Button) findViewById(R.id.requestedBtn);
        navigationView = (NavigationView) findViewById(R.id.hamburger_menu);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);


        menuIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawer.openDrawer(GravityCompat.START);
            }
        });

        Bundle extras = getIntent().getExtras();

        jobName = (TextView) findViewById(R.id.jobName_info);
        jobCharge = (TextView) findViewById(R.id.jobCharge_info);
        jobLocation = (TextView) findViewById(R.id.jobLocation_info);
        profPic = (ImageView) findViewById(R.id.prof_pic_info);
        jobDate = (TextView) findViewById(R.id.jobDate_info);
        jobTime = (TextView) findViewById(R.id.jobTime_info);
        jobDesc = (TextView) findViewById(R.id.jobDesc);
        jobTasks = (TextView) findViewById(R.id.jobTasks);
        addPref = (TextView) findViewById(R.id.additionalPref);
        recruiterName = (TextView) findViewById(R.id.recruiterName_info);

        jobname = getIntent().getStringExtra("jobName");
        jobloc = getIntent().getStringExtra("jobLocation");
        jobcharge = getIntent().getStringExtra("jobCharge");
        profpic = getIntent().getStringExtra("profPic");
        startdate = getIntent().getStringExtra("startDate");
        enddate = getIntent().getStringExtra("endDate");
        starttime = getIntent().getStringExtra("startTime");
        endtime = getIntent().getStringExtra("endTime");
        jobdesc = getIntent().getStringExtra("jobDesc");
        jobtasks = getIntent().getStringExtra("jobTasks");
        addpref = getIntent().getStringExtra("addPref");
        recruitername = getIntent().getStringExtra("recruiterName");
        jobID = extras.getInt("jobID");
        Log.e("TAG", "" + jobID);


        jobName.setText(jobname);
        jobCharge.setText(jobcharge);
        jobLocation.setText(jobloc);
        jobDate.setText(startdate + " - " + enddate);
        jobTime.setText(starttime + " - " + endtime);
        jobDesc.setText(jobdesc);
        jobTasks.setText(jobtasks);
        addPref.setText(addpref);
        recruiterName.setText(recruitername);

        Picasso.get().load(profpic).into(profPic);

        clicked = false;

        requestForHireBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                mAuth = FirebaseAuth.getInstance();
                u = mAuth.getCurrentUser();
                userID = u.getUid();
                rootRef = FirebaseDatabase.getInstance().getReference();
                appliedJobsRef = rootRef.child("Users").child(userID).child("Applied Jobs").push();
                jobNameRef = rootRef.child("Users").child(userID).child("Applied Jobs");

                jobNameRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        query = jobNameRef.orderByChild("jobID").equalTo(jobID);

                        query.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if (dataSnapshot.exists() && (!clicked)) { //This is where the problem is
                                    Toast.makeText(JobInfo.this, "Already applied", Toast.LENGTH_SHORT).show();
                                    clicked = false;
                                    Log.e("TAG", "" + clicked);

                                } else {
                                    appliedJobsRef.child("jobID").setValue(jobID);
                                    appliedJobsRef.child("job_name").setValue(jobname);
                                    appliedJobsRef.child("job_location").setValue(jobloc);
                                    appliedJobsRef.child("recruiter_name").setValue(recruitername);
                                    appliedJobsRef.child("job_charge").setValue(jobcharge);
                                    appliedJobsRef.child("profile_pic").setValue(profpic);
                                    appliedJobsRef.child("start_date").setValue(startdate);
                                    appliedJobsRef.child("end_date").setValue(enddate);
                                    appliedJobsRef.child("start_time").setValue(starttime);
                                    appliedJobsRef.child("end_time").setValue(endtime);
                                    appliedJobsRef.child("job_desc").setValue(jobdesc);
                                    appliedJobsRef.child("job_tasks").setValue(jobtasks);
                                    appliedJobsRef.child("add_pref").setValue(addpref);
                                    requestForHireBtn.setText("Request Sent!");
                                    requestForHireBtn.setEnabled(false);
                                    clicked = true;
                                }
                                Log.e("TAG", "" + clicked);

                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                                Toast.makeText(JobInfo.this, "Error", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        Toast.makeText(JobInfo.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                });

            }
        });


    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_home:
                Intent intent = new Intent(JobInfo.this, Home.class);
                startActivity(intent);
                break;

            case R.id.nav_gigs:
                Intent intent2 = new Intent(JobInfo.this, MyGigs.class);
                startActivity(intent2);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

Я попытался распечатать нажатую переменную логического типа следующим образом. Я не знаю, почему они печатаются несколько раз. Первый раз, когда пользователь нажимает на кнопку «Применить», она показывает значение «истина», затем пользователь снова нажимает на ту же вещь, она показывает «ложь». Когда пользователь решает впервые обратиться к другому заданию, отображаются как true, так и false.

04-30 12:34:01.660 9460-9460/com.example.oddsynew E/TAG: 2
04-30 12:34:03.464 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.485 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.487 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.491 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.494 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.497 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.499 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.502 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.505 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.509 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.512 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.515 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.518 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.521 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.524 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.530 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.538 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.564 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.581 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.598 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.621 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.644 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.668 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.699 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.737 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.762 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:34:03.786 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:06.937 9460-9460/com.example.oddsynew E/TAG: 2
04-30 12:49:08.517 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:08.517 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:43.672 9460-9460/com.example.oddsynew E/TAG: 1
04-30 12:49:47.991 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:47.994 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.003 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.010 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.015 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.020 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.024 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.029 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.036 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.043 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.049 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.054 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.059 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.065 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.073 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.082 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.082 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.085 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.091 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.097 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.097 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.101 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.146 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.153 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.153 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.156 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.162 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.170 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.170 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.172 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.184 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.191 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.191 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.194 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.211 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.216 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.216 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.218 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.241 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.247 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.247 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.249 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.272 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.278 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.278 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.280 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.304 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.310 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.310 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.312 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.337 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.343 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.343 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.345 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.371 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.377 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.377 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.379 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.407 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.413 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.413 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.416 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.442 9460-9460/com.example.oddsynew E/TAG: true
04-30 12:49:48.449 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.449 9460-9460/com.example.oddsynew E/TAG: false
04-30 12:49:48.452 9460-9460/com.example.oddsynew E/TAG: true

1 Ответ

0 голосов
/ 24 апреля 2020

Это очень просто сделать, в принципе, вы можете придумать собственную реализацию, но есть и другой продвинутый подход к этому. Давайте go через них обоих.

С вашей собственной реализацией. Отслеживайте щелчок с помощью переменной boolean и показывайте соответствующее сообщение пользователю.

boolean isRequestForHireBtnPressed = false;


requestForHireBtn.setOnClickListener(new View.OnClickListener() {
   if(isRequestForHireBtnPressed){
      // Show relevant toast to user
   }else{
      // Handle your use-case on user click and set isRequestForHireBtnPressed
      isRequestForHireBtnPressed = true;
   }
});

Это был самый простой способ справиться с этим. Существует еще один метод продвижения, который можно реализовать с помощью RxViews . Для получения дополнительной информации см. Документацию RxViews. Надеюсь, что это поможет вам и направит вас в правильном направлении. Удачи!

...