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:
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);
}
}