0

i am working on a freelancing app called frelance. the idea of the app is to connect freelancers with clients that need their services. and I am trying to retrieve data from the realtime database but it's not working.

ShowActivity Xml

  <?xml version="1.0" encoding="utf-8"?>
  <androidx.constraintlayout.widget.ConstraintLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".ShowActivity">



<androidx.appcompat.widget.SearchView
    android:id="@+id/Search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:background="@color/black"
    android:layout_marginBottom="5dp"
    android:hint="Search"/>

<androidx.recyclerview.widget.RecyclerView

    android:id="@+id/recyclerview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
   </androidx.constraintlayout.widget.ConstraintLayout>

ShowActivity Java Package com.example.frelance0;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.SearchView;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;

    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;

    import com.google.firebase.auth.FirebaseAuth;
    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.security.PrivateKey;
    import java.util.ArrayList;
    import java.util.Map;

    public class ShowActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

SearchView searchView;


FirebaseAuth mAuth=FirebaseAuth.getInstance();
FirebaseAuth.AuthStateListener firebaseAuthListener;
String user_id = mAuth.getCurrentUser().getUid();

DatabaseReference F_Database= FirebaseDatabase.getInstance().getReference().child("Users");
DatabaseReference Current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Freelancers");



private MyAdapter adapter;
private ArrayList<Model> list;


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

    recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    list = new ArrayList<>();
    adapter = new MyAdapter(this, list);
    recyclerView.setAdapter(adapter);

    searchView = findViewById(R.id.Search);




    //Log.d("user id", user_id);

    //Log.d("database",F_Database.toString());



    F_Database.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            Log.d("OUTSIDE LOOP", snapshot.getChildren().toString());

            for(DataSnapshot dataSnapshot : snapshot.getChildren()){
                Log.d("INSIDE LOOP", "MESSAGE");
                Model model = dataSnapshot.getValue(Model.class);
                list.add(model);
            }

            adapter.notifyDataSetChanged();
        }

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

        }
    });

    if(searchView != null){
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                search(newText);
                return true;
            }
        });
    }



}

private void search(String str){
    ArrayList<Model> mylist = new ArrayList<>();
    for(Model object: list){
        if(object.getEmail().toLowerCase().contains(str.toLowerCase())){
            mylist.add(object);
        }

    }

    MyAdapter newAdapter = new MyAdapter(mylist);
    recyclerView.setAdapter(newAdapter);
}

}

Adapter Code

    package com.example.frelance0;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

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

 import com.example.frelance0.R;

 import java.util.ArrayList;

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

ArrayList<Model> mlist;
Context context;

public MyAdapter(Context context, ArrayList<Model> mlist){
    this.mlist = mlist;
    this.context = context;
}

public MyAdapter(ArrayList<Model> mylist) {
}

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

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    Model model = mlist.get(position);
    holder.Name.setText(model.getName());
    holder.Email.setText(model.getEmail());
    holder.JobTitle.setText(model.getJobTitle());

}

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

public static class MyViewHolder extends RecyclerView.ViewHolder{

    TextView Name , Email , JobTitle;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        Name= itemView.findViewById(R.id.Name);
        Email= itemView.findViewById(R.id.Email);
        JobTitle= itemView.findViewById(R.id.Job);
    }
}

}

Model Class

 package com.example.frelance0;

 public class Model {

String Name , JobTitle , Email;

public void setName(String name) {
    Name = name;
}

public void setJobTitle(String jobTitle) {
    JobTitle = jobTitle;
}

public void setEmail(String email) {
    Email = email;
}

public String getName() {
    return Name;
}

public String getJobTitle() {
    return JobTitle;
}

public String getEmail() {
    return Email;
}
  }

and Here is a screenshot of my Realtime Database:

Realtime Database

Realtime Database

Realtime Database

as you can see its nested and i don't know why.

app error recyclerview screenshot

I will also attach the Sign up Code in Case You need it Because i Have a nested database problem:

    package com.example.frelance0;

    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.TextView;

    import com.bumptech.glide.Glide;
    import com.example.frelance0.C_Sign_in;
    import com.example.frelance0.Client_Profile;
    import com.example.frelance0.R;
    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.OnFailureListener;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.android.gms.tasks.Task;
    import com.google.firebase.auth.AuthResult;
    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.ValueEventListener;
    import com.google.firebase.storage.FirebaseStorage;
    import com.google.firebase.storage.StorageReference;
    import com.google.firebase.storage.UploadTask;

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;

    public class F_Sign_Up extends AppCompatActivity {

EditText mFirstName , mLastName , mEmail , mPassword  , mphone;
EditText insta , behance , website ;
EditText Skill1 , Skill2 , Skill3  , Skill4   , Brief , jobTitle , Software1 , Software2 , Software3 , Software4;

ImageView ProfileImg;

Button register;
TextView mlogin;
ProgressBar progressBar;
String ProfileimgUrl;

FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener firebaseAuthListener;
DatabaseReference F_Database;
Uri resultUri;







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



    //connect Xml



    mFirstName= (EditText) findViewById(R.id.FirstName);
    mLastName= (EditText) findViewById(R.id.LastName);
    mEmail= (EditText) findViewById(R.id.email);
    mPassword= (EditText) findViewById(R.id.password);
    mphone= (EditText) findViewById(R.id.phone);
    register= (Button) findViewById(R.id.signUp);
    mlogin = (TextView) findViewById(R.id.logIn);
    progressBar= (ProgressBar) findViewById(R.id.progressBar);
    Skill1 = (EditText) findViewById(R.id.skill1);
    Skill2 = (EditText) findViewById(R.id.skill2);
    Skill3 = (EditText) findViewById(R.id.skill3);
    Skill4 = (EditText) findViewById(R.id.skill4);
    Software1 = (EditText) findViewById(R.id.software1);
    Software2 = (EditText) findViewById(R.id.software2);
    Software3 = (EditText) findViewById(R.id.software3);
    Software4 =(EditText) findViewById(R.id.software4);
    jobTitle = (EditText) findViewById(R.id.JobTiTleHint);
    Brief = (EditText) findViewById(R.id.Brief);

    insta = (EditText) findViewById(R.id.insta);
    behance = (EditText) findViewById(R.id.Behance);
    website = (EditText) findViewById(R.id.Website);



    ProfileImg = findViewById(R.id.ProfilePic);

    String img = ProfileImg.toString();

    ProfileImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent , 1);
        }
    });
















    mAuth =FirebaseAuth.getInstance();

    firebaseAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

            if(user != null) {

                Intent intent = new Intent(com.example.frelance0.F_Sign_Up.this, Freelancer_Profile.class);

                String P = mphone.getText().toString();
                intent.putExtra("Phone",P);
                startActivity(intent);
                return;

            }


        }
    };

    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String Email = mEmail.getText().toString().trim();
            String Password = mPassword.getText().toString().trim();









            mAuth =FirebaseAuth.getInstance();


            progressBar.setVisibility(View.VISIBLE);

            mAuth.createUserWithEmailAndPassword(Email,Password).addOnCompleteListener(com.example.frelance0.F_Sign_Up.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {


                    // if (task.isSuccessful()){
                    //Toast.makeText(F_Sign_Up.this, "Sign Up Error", Toast.LENGTH_SHORT).show();

                    if(TextUtils.isEmpty(Email)){

                        mEmail.setError("E-mail is Required");
                        return;
                    }

                    if(TextUtils.isEmpty(Password)){

                        mPassword.setError("Password is Required");
                        return;
                    }
                    if(Password.length() < 6){

                        mPassword.setError("Password Must Be More Than 6 Char ");
                        return;
                    }



                    if(mAuth.getCurrentUser() != null) {

                        String user_id = mAuth.getCurrentUser().getUid();
                        DatabaseReference Current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Freelancers").child(user_id);
                        Current_user_db.setValue(true);

                        F_Database =FirebaseDatabase.getInstance().getReference().child("Users").child("Freelancers").child(user_id);
                        Getinfo();
                        Saveinfo();

                        Intent intent = new Intent(com.example.frelance0.F_Sign_Up.this, loading.class);

                        //Phone Intent

                        String P = mphone.getText().toString();
                        intent.putExtra("Phone",P);


                        startActivity(intent);




                        String Email = mEmail.getText().toString().trim();
                        String Password = mPassword.getText().toString().trim();
                        String FirstName = mFirstName.getText().toString();
                        String LastName =  mLastName.getText().toString();
                        String FullName = mFirstName.getText().toString() + " " + mLastName.getText().toString();
                        String PhoneNum= mphone.getText().toString();
                        String  Fsoftware= Software1.getText().toString();
                        String  ssoftware= Software2.getText().toString();
                        String  tsoftware= Software3.getText().toString();
                        String  Ffsoftware= Software4.getText().toString();
                        String  Fskill= Skill1.getText().toString();
                        String  sskill= Skill2.getText().toString();
                        String  tskill= Skill3.getText().toString();
                        String  Ffskill= Skill4.getText().toString();
                        String  JB= jobTitle.getText().toString();
                        String  B= Brief.getText().toString();
                        String Be = behance.getText().toString();
                        String instag = insta.getText().toString();
                        String web = website.getText().toString();


                        Users user = new Users(FullName,FirstName,LastName,Email,Fskill,sskill,tskill,Ffskill,Fsoftware,ssoftware,tsoftware,Ffsoftware,web,instag,Be,JB,Integer.parseInt(PhoneNum));
                        F_Database.child("Users").child("Freelancers").push().setValue(user);



                    }

                }
            });




        }






    });







}

@Override
protected void onStart() {
    super.onStart();

    mAuth.addAuthStateListener(firebaseAuthListener);
}

@Override
protected void onStop() {
    super.onStop();
    mAuth.removeAuthStateListener(firebaseAuthListener);

}

public void Saveinfo(){

    String Email = mEmail.getText().toString().trim();
    String Password = mPassword.getText().toString().trim();
    String FirstName = mFirstName.getText().toString();
    String LastName =  mLastName.getText().toString();
    String FullName = mFirstName.getText().toString() + " " + mLastName.getText().toString();
    String PhoneNum= mphone.getText().toString();
    String  Fsoftware= Software1.getText().toString();
    String  ssoftware= Software2.getText().toString();
    String  tsoftware= Software3.getText().toString();
    String  Ffsoftware= Software4.getText().toString();
    String  Fskill= Skill1.getText().toString();
    String  sskill= Skill2.getText().toString();
    String  tskill= Skill3.getText().toString();
    String  Ffskill= Skill4.getText().toString();
    String  JB= jobTitle.getText().toString();
    String  B= Brief.getText().toString();
    String Be = behance.getText().toString();
    String instag = insta.getText().toString();
    String web = website.getText().toString();
    Map<String,Object> Map = new HashMap<>();

    Map userinfo = new HashMap();

    userinfo.put("First Name",FirstName);
    userinfo.put("Last Name",LastName);
    userinfo.put("Full Name",FullName);
    userinfo.put("Email",Email);
    userinfo.put("Phone Number" , PhoneNum);
    //Skills
    userinfo.put("Skill 1",Fskill);
    userinfo.put("Skill 2",sskill);
    userinfo.put("Skill 3",tskill);
    userinfo.put("Skill 4",Ffskill);

    //Softwares
    userinfo.put("Software 1",Fsoftware);
    userinfo.put("Software 2",ssoftware);
    userinfo.put("Software 3",tsoftware);
    userinfo.put("Software 4",Ffsoftware);


    //other
    userinfo.put("Brief",B);
    userinfo.put("Job Title",JB);

    userinfo.put("Website",web);
    userinfo.put("Instagram",instag);
    userinfo.put("Behance",Be);




    String user_id = mAuth.getCurrentUser().getUid();

    F_Database.updateChildren(userinfo);

    if(resultUri!= null){
        StorageReference FilePath = FirebaseStorage.getInstance().getReference().child("Profile images").child(user_id);
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
        } catch (IOException e) {
            e.printStackTrace();
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,20,baos);
        byte[] data = baos.toByteArray();
        UploadTask uploadTask = FilePath.putBytes(data);

        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                finish();
                return;
            }
        });

        uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> downloadUrl = taskSnapshot.getStorage().getDownloadUrl();
                Map newImg = new HashMap();
                newImg.put("ProfileImageUrl", downloadUrl.toString());
                F_Database.updateChildren(newImg);
                finish();
                return;
            }
        });

    }else {

        finish();
    }





}

public void Getinfo(){
    F_Database.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot datasnapshot) {
            if(datasnapshot.exists() && datasnapshot.getChildrenCount()>0){

                String Email = mEmail.getText().toString().trim();
                String Password = mPassword.getText().toString().trim();
                String FirstName = mFirstName.getText().toString();
                String LastName =  mLastName.getText().toString();
               // String FullName = mFirstName.getText().toString() + " " + mLastName.getText().toString();
                String PhoneNum= mphone.getText().toString();
                String  Fsoftware= Software1.getText().toString();
                String  ssoftware= Software2.getText().toString();
                String  tsoftware= Software3.getText().toString();
                String  Ffsoftware= Software4.getText().toString();
                String  Fskill= Skill1.getText().toString();
                String  sskill= Skill2.getText().toString();
                String  tskill= Skill3.getText().toString();
                String  Ffskill= Skill4.getText().toString();
                String  JB= jobTitle.getText().toString();
                String  B= Brief.getText().toString();
                String Be = behance.getText().toString();
                String instag = insta.getText().toString();
                String web = website.getText().toString();
                Map<String,Object> Map = new HashMap<>();





                if(Map.get("First Name")!=null){
                    FirstName = Map.get("First Name").toString();
                    mFirstName.setText(FirstName);

            }

                if(Map.get("Email")!=null){
                    Email = Map.get("Email").toString();
                    mEmail.setText(Email);

                }




                if(Map.get("Password")!=null){
                    Password = Map.get("Password").toString();
                    mPassword.setText(Password);

                }



                if(Map.get("LastName")!=null){
                    LastName = Map.get("LastName").toString();
                    mLastName.setText(LastName);

                }





                if(Map.get("PhoneNum")!=null){
                    PhoneNum = Map.get("PhoneNum").toString();
                    mphone.setText(PhoneNum);

                }




                if(Map.get("Fsoftware")!=null){
                    Fsoftware = Map.get("Fsoftware").toString();
                    Software1.setText(Fsoftware);

                }



                if(Map.get("ssoftware")!=null){
                    ssoftware = Map.get("ssoftware").toString();
                    Software2.setText(ssoftware);

                }




                if(Map.get("tsoftware")!=null){
                    tsoftware= Map.get("ssoftware").toString();
                    Software3.setText(tsoftware);

                }




                if(Map.get("Ffsoftware")!=null){
                    Ffsoftware = Map.get("Ffsoftware").toString();
                    Software4.setText(Ffsoftware);

                }



                if(Map.get("Fskill")!=null){
                    Fskill = Map.get("First Name").toString();
                    Skill1.setText(Fskill);

                }




                if(Map.get("sskill")!=null){
                    sskill = Map.get("First Name").toString();
                    Skill2.setText(sskill);

                }




                if(Map.get("tskill")!=null){
                    tskill = Map.get("tskill").toString();
                    Skill3.setText(tskill);

                }




                if(Map.get("Ffskill")!=null){
                    Ffskill= Map.get("Ffskill").toString();
                    Skill4.setText(Ffskill);

                }




                if(Map.get("JB")!=null){
                    JB = Map.get("JB").toString();
                    jobTitle.setText(JB);

                }




                if(Map.get("B")!=null){
                    B = Map.get("B").toString();
                    Brief.setText(B);

                }


                if(Map.get("Be")!=null){
                    Be = Map.get("Be").toString();
                    behance.setText(Be);

                }


                if(Map.get("instag")!=null){
                    instag = Map.get("instag").toString();
                    insta.setText(instag);

                }


                if(Map.get("web")!=null){
                    web = Map.get("web").toString();
                    website.setText(web);

                }





                if(Map.get("ProfileImageUrl")!=null){

                    ProfileimgUrl = Map.get("ProfileImageUrl").toString();
                    Glide.with(getApplication()).load(ProfileimgUrl).into(ProfileImg);

               }


            }

        }

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

        }
    });




}

public void onClick(View view){

    Intent intent = new Intent(com.example.frelance0.F_Sign_Up.this, Freelancer_Log_in.class);

    startActivity(intent);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == 1 && requestCode == Activity.RESULT_OK);
    final Uri imgUri = data.getData();

    resultUri = imgUri;
    ProfileImg.setImageURI(imgUri);
}

}

shahed
  • 1
  • 1
  • 1
    "it's not working" doesn't provide enough information so we can help. What exactly in this code doesn't work the way you expect? Tell us what is wrong with shared code. Do you have any errors? – Alex Mamo Nov 04 '21 at 05:58
  • Yes, and the screen which is named "app error recyclerview" doesn't contains error messages – Elikill58 Nov 04 '21 at 09:47
  • @AlexMamo in app error recyclerView screenshot, it not showing any error messages but it is not showing the data : Name, Job Title & Email in the recyclerView that it should take from the realtime Database. i am thinking that it has to do something with the nested database problem that I have and that's why I uploaded the sign up page code and a screenshots from my realtime database. – shahed Nov 04 '21 at 16:31
  • I might check [this](https://stackoverflow.com/questions/54069574/firebase-android-listview-not-being-displayed) out. – Alex Mamo Nov 04 '21 at 20:05
  • @AlexMamo it didn't work, the problem was not from the Names. – shahed Nov 05 '21 at 02:57

0 Answers0