Ошибка при попытке получить данные из базы данных Firebase, используя android представление переработчика - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь получить данные из базы данных Firebase, используя android RecyclerView. Каждый раз, когда я запускаю свое приложение, чтобы проверить его, я получаю сообщение о том, что мое приложение остановлено. Я не уверен, что я делаю неправильно. Я посмотрел на Logcat, чтобы увидеть, что это за ошибка, но она только говорит мне, в какой строке находится ошибка, но не объясняет, почему это ошибка. Может кто-нибудь, пожалуйста, помогите мне здесь. Вот мой код ниже

 //UserInformation.java

    public class UserInformation {

    public String bname;
    public String address;
    public String phone;

    public UserInformation(String bname, String address, String phone) {
        this.bname = bname;
        this.address = address;
        this.phone = phone;
    }



    public String getBname() {
        return bname;
    }

    public void setBname(String bname) {
        this.bname = bname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}


//Myadapter.java

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

    Context context;
    ArrayList<UserInformation> users;

    public MyAdapter(Context c,ArrayList<UserInformation> u){

        context=c;
        users=u;

    }

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

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.biz.setText(users.get(position).getBname());
        holder.address.setText(users.get(position).getAddress());


    }

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

    class MyViewHolder extends RecyclerView.ViewHolder{


        TextView biz,address;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            biz=(TextView)itemView.findViewById(R.id.biz_name);
            address=(TextView)itemView.findViewById(R.id.biz_address);
        }
    }
}

//MainActivity.java

public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {


    DatabaseReference rootRef;
    MenuItem menuItem;
    RecyclerView recycler;
    private static final int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1;
    private FusedLocationProviderClient mFusedLocationClient;
    ArrayList<UserInformation> list;
    MyAdapter adapter;






   @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news_feed);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);



        menuItem=(MenuItem)findViewById(R.id.item_sign_in);




       mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);


       recycler=findViewById(R.id.recyclerView);
       recycler.setLayoutManager(new LinearLayoutManager(this));




//database reference pointing to root of database
       rootRef = FirebaseDatabase.getInstance().getReference().child("Users");




       rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
           @Override
           public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
              if(dataSnapshot.exists()){
                  list=new ArrayList<UserInformation>();

                  for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
                      UserInformation uuu=dataSnapshot1.getValue(UserInformation.class);
                      list.add(uuu);

                  }
              }

               adapter=new MyAdapter(MainActivity.this,list);
               recycler.setAdapter(adapter);

           }

           @Override
           public void onCancelled(@NonNull DatabaseError databaseError) {
               Toast.makeText(MainActivity.this,"Something went wrong",Toast.LENGTH_LONG).show();
           }
       });




       if (ContextCompat.checkSelfPermission(MainActivity.this,
               Manifest.permission.ACCESS_COARSE_LOCATION)
               != PackageManager.PERMISSION_GRANTED) {

           // Permission is not granted
           // Should we show an explanation?
           if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                   Manifest.permission.ACCESS_COARSE_LOCATION)) {
               // Show an explanation to the user *asynchronously* -- don't block
               // this thread waiting for the user's response! After the user
               // sees the explanation, try again to request the permission.

               new AlertDialog.Builder(this)
                       .setTitle("Required Location Permission")
                       .setMessage("You have to give this permission to access this feature")
                       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                           @Override
                           public void onClick(DialogInterface dialogInterface, int i) {
                               ActivityCompat.requestPermissions(MainActivity.this,
                                       new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                                       MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
                           }
                       })
                       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                           @Override
                           public void onClick(DialogInterface dialogInterface, int i) {
                               dialogInterface.dismiss();
                           }
                       })
                       .create()
                       .show();


           } else {
               // No explanation needed; request the permission
               ActivityCompat.requestPermissions(MainActivity.this,
                       new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                       MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);

               // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
               // app-defined int constant. The callback method gets the
               // result of the request.
           }
       } else {
           // Permission has already been granted
           mFusedLocationClient.getLastLocation()
                   .addOnSuccessListener(this, new OnSuccessListener<Location>() {
                       @Override
                       public void onSuccess(Location location) {
                           // Got last known location. In some rare situations this can be null.
                           if (location != null) {
                               // Logic to handle location object
                               Double latittude = location.getLatitude();
                               Double longitude = location.getLongitude();





                               //user_location.setText("Latitude = "+latittude + "\nLongitude = " + longitude);
                               Toast.makeText(MainActivity.this,"Permission has been granted",Toast.LENGTH_LONG).show();



                           }
                       }
                   });



       }


//Firebase database

enter image description here

// Журнал ошибок

enter image description here

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Вам необходимо добавить пустой constructor в ваш classmodel.

Просто добавьте это.

     UserInformation(){ }
2 голосов
/ 10 января 2020

В вашей UserInformation имя переменной класса и имя firebase различаются. вы должны использовать ту же переменную для отображения классов

 public class UserInformation {

       public String   businesname;
        public String   address;
       public String   phonenumber;

     // add empty constructor necessary for firebase
    //  add 2nd constructor(as per your need)  
   // add getter and setter

  }

Использовать верблюд для именования переменных.

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