Matt Knight
Matt Knight

Reputation: 3

I can't get the profile name and pic with a query search from firebase database in Android Studio. App stops working. Any fix?

I'm copying the entire activity below, findfriendsactivity.java to search and query name, profile and pic from firebase database in Android Studio after I run the app. Apps stops working when I type and search a name. App worked fine before this activity. How can I fix this?

package com.example.socialnetwork.socialnetwork;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.squareup.picasso.Picasso;

import de.hdodenhof.circleimageview.CircleImageView;

public class FindFriendsActivity extends AppCompatActivity {

private Toolbar mToolbar;

private ImageButton SearchButton;
private EditText SearchInputText;

private RecyclerView SearchResultList;

private DatabaseReference allUsersDatabaseRef;


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


    allUsersDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users");


    mToolbar = (Toolbar) findViewById(R.id.find_friends_appbar_layout);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("Find Friends");

    SearchResultList = (RecyclerView) findViewById(R.id.search_result_list);
    SearchResultList.setHasFixedSize(true);
    SearchResultList.setLayoutManager(new LinearLayoutManager(this));

    SearchButton = (ImageButton) findViewById(R.id.search_people_friends_button);
    SearchInputText = (EditText) findViewById(R.id.search_box_input);


    SearchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            String searchBoxInput = SearchInputText.getText().toString();

            SearchPeopleAndFriends(searchBoxInput);
        }
    });
}


private void SearchPeopleAndFriends(String searchBoxInput)
{
    Toast.makeText(this, "Searching....", Toast.LENGTH_LONG).show();

    Query searchPeopleandFriendsQuery = allUsersDatabaseRef.orderByChild("fullname")
            .startAt(searchBoxInput).endAt(searchBoxInput + "\uf8ff");

    FirebaseRecyclerAdapter<FindFriends, FindFriendsViewHolder> firebaseRecyclerAdapter
            = new FirebaseRecyclerAdapter<FindFriends, FindFriendsViewHolder>
            (
                    FindFriends.class,
                    R.layout.all_users_display_layout,
                    FindFriendsViewHolder.class,
                    searchPeopleandFriendsQuery
            )
    {
        @Override
        protected void populateViewHolder(FindFriendsViewHolder viewHolder, FindFriends model, int position) {

            viewHolder.setFullName(model.getFullname());
            viewHolder.setStatus(model.getStatus());
            viewHolder.setProfileimage(getApplicationContext(), model.getProfileimage());
        }
    };
    SearchResultList.setAdapter(firebaseRecyclerAdapter);
}



public static class FindFriendsViewHolder extends RecyclerView.ViewHolder
{
    View mView;

    public FindFriendsViewHolder(View itemView) {
        super(itemView);

        mView = mView;
    }


    public void setProfileimage(Context ctx, String profileimage) {

        CircleImageView myImage = (CircleImageView) mView.findViewById(R.id.all_users_profile_image);
        Picasso.with(ctx).load(profileimage).placeholder(R.drawable.profile).into(myImage);
    }


    public void setFullName(String fullname) {

        TextView myName = (TextView) mView.findViewById(R.id.all_users_profile_full_name);
        myName.setText(fullname);
    }


    public void setStatus(String status) {

        TextView myStatus = (TextView) mView.findViewById(R.id.all_users_status);
        myStatus.setText(status);
    }
}

}

Now I'm copying the error message I receive when I search a name in find friends after I run the app. App stops working and goes back to main.

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.socialnetwork.socialvegan, PID: 9563 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.example.socialnetwork.socialnetwork.FindFriendsActivity$FindFriendsViewHolder.setFullName(FindFriendsActivity.java:118) at com.example.socialnetwork.socialnetwork.FindFriendsActivity$2.populateViewHolder(FindFriendsActivity.java:88) at com.example.socialnetwork.socialnetwork.FindFriendsActivity$2.populateViewHolder(FindFriendsActivity.java:84) at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:165) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529) at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1767) at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:356) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:603) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5476) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) I/Process: Sending signal. PID: 9563 SIG: 9 Application terminated.

Perhaps someone can find a fix to this. All the build.gradle looks fine. I don't see any mistake. I'm new to the firebase database. There may be a mistake with querying firebase database.

Upvotes: 0

Views: 238

Answers (1)

Doug Stevenson
Doug Stevenson

Reputation: 317710

mView is null. That's because this line of code in FindFriendsViewHolder does nothing:

mView = mView;

mView starts null and remains null forever, because it's never set with a non-null value.

It looks like you want to use itemView from ViewHolder instead.

Upvotes: 0

Related Questions