Получение данных Firebase и передача их из фрагмента в новое действие не работает - PullRequest
1 голос
/ 28 мая 2020

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

Я передал данные из фрагмента в новое действие и отображаю их в новом действии. Ошибок нет, но подробности не отображаются. Я прикрепил код и структуру базы данных firebase.

Вот файл WorkFragment. java, который показывает задания в recyclerview.

WorkFragment. java

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

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 com.google.firebase.database.annotations.Nullable;

import java.util.ArrayList;

public class WorkFragment extends Fragment {
    DatabaseReference databaseReference;
    RecyclerView recyclerView;
    FirebaseDatabase firebaseDatabase;
    ArrayList<Jobs> jobs;
    MyAdapter adapter;
    ProgressDialog pd;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_work, container, false);
        recyclerView = view.findViewById(R.id.work);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        pd = new ProgressDialog(getContext());
        pd.setMessage("Loading Jobs for you...");
        pd.show();
        jobs = new ArrayList<Jobs>();
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference().child("Jobs");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds: dataSnapshot.getChildren()){
                    Jobs j = ds.getValue(Jobs.class);
                    jobs.add(j);
                }
                pd.dismiss();
                adapter = new MyAdapter(getContext(), jobs);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                pd.dismiss();
            }
        });
        return view;
    }
}

Вот класс MyAdapter. java, который выполняет работу для recyclerview.

MyAdapter. java

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

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.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    Context context;
    ArrayList<Jobs> jobs;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;

    public MyAdapter(Context c, ArrayList<Jobs> j){
        context = c;
        jobs = j;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.job, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.jobtitle.setText(jobs.get(position).getJobtitle());
        holder.jobtype.setText(jobs.get(position).getJobtype());
        holder.companyname.setText(jobs.get(position).getCompany());
        holder.location.setText(jobs.get(position).getLocation());
        holder.jobdate.setText(jobs.get(position).getJobdate());
        holder.viewmore.setText(jobs.get(position).getViewmore());
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference("Jobs");
        holder.viewmore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                databaseReference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        String jobtitle = dataSnapshot.child("jobtitle").getValue(String.class);
                        String company = dataSnapshot.child("company").getValue(String.class);
                        String location = dataSnapshot.child("location").getValue(String.class);
                        String jobtype = dataSnapshot.child("jobtype").getValue(String.class);
                        String startDate = dataSnapshot.child("startdate").getValue(String.class);
                        String salary = dataSnapshot.child("salary").getValue(String.class);
                        String about = dataSnapshot.child("about").getValue(String.class);
                        String responsiblities = dataSnapshot.child("responsiblities").getValue(String.class);
                        String musthave = dataSnapshot.child("musthave").getValue(String.class);
                        String seniority = dataSnapshot.child("seniority").getValue(String.class);

                        Intent intent = new Intent(context, JobDescription.class);
                        intent.putExtra("JOBTITLE", jobtitle);
                        intent.putExtra("COMPANY", company);
                        intent.putExtra("LOCATION", location);
                        intent.putExtra("JOBTYPE", jobtype);
                        intent.putExtra("STARTDATE", startDate);
                        intent.putExtra("SALARY", salary);
                        intent.putExtra("ABOUT", about);
                        intent.putExtra("RESPONSIBLITIES", responsiblities);
                        intent.putExtra("MUSTHAVE", musthave);
                        intent.putExtra("SENIORITY", seniority);
                        context.startActivity(intent);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        });
    }

    @Override
    public int getItemCount() {
        return jobs.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView jobtitle, jobtype, companyname, location, jobdate, viewmore;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            jobtitle = (TextView) itemView.findViewById(R.id.jobTitle);
            jobtype = (TextView) itemView.findViewById(R.id.jobType);
            companyname = (TextView) itemView.findViewById(R.id.companyName);
            location = (TextView) itemView.findViewById(R.id.location);
            jobdate = (TextView) itemView.findViewById(R.id.jobDate);
            viewmore = (TextView) itemView.findViewById(R.id.viewMore);
        }
    }
}

Вот класс Job.class.

Задания. java

    public class Jobs {
    private String jobtitle, jobtype, company, location, jobdate, viewmore, startdate, salary, about, responsiblities, musthave, seniority;

    public Jobs() {
    }

    public Jobs(String jobtitle, String jobtype, String company, String location, String jobdate, String viewmore, String startdate, String salary, String about, String responsiblities, String musthave, String seniority) {
        this.jobtitle = jobtitle;
        this.jobtype = jobtype;
        this.company = company;
        this.location = location;
        this.jobdate = jobdate;
        this.viewmore = viewmore;
        this.startdate = startdate;
        this.salary = salary;
        this.about = about;
        this.responsiblities = responsiblities;
        this.musthave = musthave;
        this.seniority = seniority;
    }

    public String getJobtitle() {
        return jobtitle;
    }

    public void setJobtitle(String jobtitle) {
        this.jobtitle = jobtitle;
    }

    public String getJobtype() {
        return jobtype;
    }

    public void setJobtype(String jobtype) {
        this.jobtype = jobtype;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getJobdate() {
        return jobdate;
    }

    public void setJobdate(String jobdate) {
        this.jobdate = jobdate;
    }

    public String getViewmore() {
        return viewmore;
    }

    public void setViewmore(String viewmore) {
        this.viewmore = viewmore;
    }

    public String getStartdate() {
        return startdate;
    }

    public void setStartdate(String startdate) {
        this.startdate = startdate;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    public String getAbout() {
        return about;
    }

    public void setAbout(String about) {
        this.about = about;
    }

    public String getResponsiblities() {
        return responsiblities;
    }

    public void setResponsiblities(String responsiblities) {
        this.responsiblities = responsiblities;
    }

    public String getMusthave() {
        return musthave;
    }

    public void setMusthave(String musthave) {
        this.musthave = musthave;
    }

    public String getSeniority() {
        return seniority;
    }

    public void setSeniority(String seniority) {
        this.seniority = seniority;
    }
}

Вот описание задания. java, в котором показаны подробности задания. В этом классе я получаю подробную информацию из фрагмента и отображаю его.

Описание задания. java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;


public class JobDescription extends AppCompatActivity {

    TextView jobtitle, company, location, startDate, salary, aboutText, responsiblityText, musthaveText, jobtypetext, seniority;
    Button applyNow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_job_description);
        getSupportActionBar().setTitle("Job Description");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        jobtitle = (TextView) findViewById(R.id.jobTitle);
        company = (TextView) findViewById(R.id.company);
        location = (TextView) findViewById(R.id.location);
        startDate = (TextView) findViewById(R.id.startDate);
        salary = (TextView) findViewById(R.id.salary);
        aboutText = (TextView) findViewById(R.id.aboutText);
        responsiblityText = (TextView) findViewById(R.id.responsiblityText);
        musthaveText = (TextView) findViewById(R.id.musthaveText);
        jobtypetext = (TextView) findViewById(R.id.jobtypetext);
        seniority = (TextView) findViewById(R.id.seniority);
        applyNow = (Button) findViewById(R.id.applyBtn);

        jobtitle.setText(getIntent().getStringExtra("JOBTITLE"));
        company.setText(getIntent().getStringExtra("COMPANY"));
        location.setText(getIntent().getStringExtra("LOCATION"));
        startDate.setText(getIntent().getStringExtra("STARTDATE"));
        salary.setText(getIntent().getStringExtra("SALARY"));
        aboutText.setText(getIntent().getStringExtra("ABOUT"));
        responsiblityText.setText(getIntent().getStringExtra("RESPONSIBLITIES"));
        musthaveText.setText(getIntent().getStringExtra("MUSTHAVE"));
        jobtypetext.setText(getIntent().getStringExtra("JOBTYPE"));
        seniority.setText(getIntent().getStringExtra("SENIORITY"));
    }
}

Вот структура базы данных firebase.

Firebase Database

1 Ответ

7 голосов
/ 28 мая 2020

В вашем адаптере вам не нужно добавлять valueeventlistner, все, что вам нужно, это передать данные в descriptionactivity, как показано ниже

 holder.viewmore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                        Intent intent = new Intent(context, JobDescription.class);
                        intent.putExtra("JOBTITLE", jobs.getJobtitle);
                        intent.putExtra("COMPANY", jobs.getcompany);

                        context.startActivity(intent);
                    }


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