-2

How to solve the problem of display the ListView because I don't know which data I have to put when I'm reading data from my firebase DB and display it in the ListView. and how to fix the problem of mList variable when the data came from firebase DB

CustomListAdapter.java

public class CustomListAdapter extends ArrayAdapter<String> {
private Context mContext;
private int id;
private List<String> items ;

public CustomListAdapter(Context context, int textViewResourceId , List<String> list )
{
    super(context,textViewResourceId,list);
    mContext = context;
    id = textViewResourceId;
    items = list ;
}

@Override
public View getView(int position, View v, ViewGroup parent)
{
    View mView = v ;
    if(mView == null){
        LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = vi.inflate(id, null);
    }

    TextView text = (TextView) mView.findViewById(R.id.textView);

    if(items.get(position) != null )
    {
        text.setTextColor(Color.WHITE);
        text.setText(items.get(position));
        text.setBackgroundColor(Color.RED);
        int color = Color.argb( 200, 255, 64, 64 );
        text.setBackgroundColor( color );

    }

    return mView;
}

}

ViewDatabase.java

public class ViewDatabase extends AppCompatActivity {
private static final String TAG = "ViewDatabase";

//add Firebase Database stuff
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private  String userID;

private ListView mListView;
private List<String> mList ;




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

    mListView = findViewById(R.id.listview);

    mList = new ArrayList<String>();


    //declare the database reference object. This is what we use to access the database.
    //NOTE: Unless you are signed in, this will not be useable.
    mAuth = FirebaseAuth.getInstance();
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    myRef = mFirebaseDatabase.getReference();
    FirebaseUser user = mAuth.getCurrentUser();
   // userID = user.getUid();
    userID ="";

    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                toastMessage("Successfully signed in.");
            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
                toastMessage("Successfully signed out.");
            }
            // ...
        }
    };

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}


private void showData(DataSnapshot dataSnapshot) {
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        DailyInfo uInfo = new DailyInfo();
        uInfo.setHero1(ds.child(userID).getValue(DailyInfo.class).getHero1()); //set the name1
        uInfo.setHero2(ds.child(userID).getValue(DailyInfo.class).getHero2()); //set the name2
        uInfo.setHero3(ds.child(userID).getValue(DailyInfo.class).getHero3()); //set the name3
        uInfo.setHero4(ds.child(userID).getValue(DailyInfo.class).getHero4()); //set the name4
        uInfo.setHero5(ds.child(userID).getValue(DailyInfo.class).getHero5()); //set the name5
        uInfo.setHero6(ds.child(userID).getValue(DailyInfo.class).getHero6()); //set the name6
        uInfo.setHero7(ds.child(userID).getValue(DailyInfo.class).getHero7()); //set the name7
        uInfo.setHero8(ds.child(userID).getValue(DailyInfo.class).getHero8()); //set the name8
        uInfo.setHero9(ds.child(userID).getValue(DailyInfo.class).getHero9()); //set the name9
        uInfo.setHero10(ds.child(userID).getValue(DailyInfo.class).getHero10()); //set the name10
        uInfo.setHero11(ds.child(userID).getValue(DailyInfo.class).getHero11()); //set the name11
        uInfo.setHero12(ds.child(userID).getValue(DailyInfo.class).getHero12()); //set the name12




        //display all the information
        Log.d(TAG, "showData: Hero1: " + uInfo.getHero1());
        Log.d(TAG, "showData: Hero2: " + uInfo.getHero2());
        Log.d(TAG, "showData: Hero3: " + uInfo.getHero3());
        Log.d(TAG, "showData: Hero4: " + uInfo.getHero4());
        Log.d(TAG, "showData: Hero5: " + uInfo.getHero5());
        Log.d(TAG, "showData: Hero6: " + uInfo.getHero6());
        Log.d(TAG, "showData: Hero7: " + uInfo.getHero7());
        Log.d(TAG, "showData: Hero8: " + uInfo.getHero8());
        Log.d(TAG, "showData: Hero9: " + uInfo.getHero9());
        Log.d(TAG, "showData: Hero10: " + uInfo.getHero10());
        Log.d(TAG, "showData: Hero11: " + uInfo.getHero11());
        Log.d(TAG, "showData: Hero12: " + uInfo.getHero12());


        ArrayList<String> array  = new ArrayList<>();
        array.add(uInfo.getHero1());
        array.add(uInfo.getHero2());
        array.add(uInfo.getHero3());
        array.add(uInfo.getHero4());
        array.add(uInfo.getHero5());
        array.add(uInfo.getHero6());
        array.add(uInfo.getHero7());
        array.add(uInfo.getHero8());
        array.add(uInfo.getHero9());
        array.add(uInfo.getHero10());
        array.add(uInfo.getHero11());
        array.add(uInfo.getHero12());

        /*ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        mListView.setAdapter(adapter);*/


        CustomListAdapter adapter = new CustomListAdapter(ViewDatabase.this , R.layout.custom_list , mList);
        ListView mListView= findViewById(R.id.listview);
        mListView.setAdapter(adapter);
    }
}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}


/**
 * customizable toast
 * @param message
 */
private void toastMessage(String message){
    Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
}

view_database_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<TextView
    android:id="@+id/tvUserInfo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="User Information"
    android:textAlignment="center"
    android:textColor="@color/colorPrimaryDark"
    android:textSize="25sp"/>

<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

</LinearLayout>

custom_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView"
    android:textSize="20px" 
android:paddingTop="10dip" 
android:paddingBottom="10dip"/>
</LinearLayout>

DailyInfo.java

public class DailyInfo {

private String hero1;

private String hero2;
private String hero3;
private String hero4;
private String hero5;
private String hero6;
private String hero7;
private String hero8;
private String hero9;
private String hero10;
private String hero11;
private String hero12;



public DailyInfo(){

}


public String getHero1() {
    return hero1;
}

public void setHero1(String hero1) {
    this.hero1 = hero1;
}


public String getHero2() {
 return hero2;
 }

public void setHero2(String hero2) {
    this.hero2 = hero2;
}

public String getHero3() {
    return hero3;
}

public void setHero3(String hero3) {
    this.hero3 = hero3;
}

public String getHero4() {
    return hero4;
}

public void setHero4(String hero4) {
    this.hero4 = hero4;
}

public String getHero5() {
    return hero5;
}

public void setHero5(String hero5) {
    this.hero5 = hero5;
}

public String getHero6() {
    return hero6;
}

public void setHero6(String hero6) {
    this.hero6 = hero6;
}

public String getHero7() {
    return hero7;
}

public void setHero7(String hero7) {
    this.hero7 = hero7;
}

public String getHero8() {
    return hero8;
}

public void setHero8(String hero8) {
    this.hero8 = hero8;
}

public String getHero9() {
    return hero9;
}

public void setHero9(String hero9) {
    this.hero9 = hero9;
}

public String getHero10() {
    return hero10;
}

public void setHero10(String hero10) {
    this.hero10 = hero10;
}

public String getHero11() {
    return hero11;
}

public void setHero11(String hero11) {
    this.hero11 = hero11;
}

public String getHero12() {
    return hero12;
}

public void setHero12(String hero12) {
    this.hero12 = hero12;
}
}
andios
  • 61
  • 9

1 Answers1

2

Where are you getting NPE?

Did you filled mList with data? i did not find. ArrayList is passing with empty data. please check it. and if you getting exception in adapter may be for not making the attachToRoot = false. make it like bellow.

if(mView == null){
    LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mView = vi.inflate(id, null,false);
}
AA Shakil
  • 538
  • 4
  • 14
Bashir Fardoush
  • 184
  • 1
  • 10
  • thank you @Bashir Fardoush for your answer but I don't know which data I have to put because I'm reading data from my firebase and display it in the list view, any fix? – andios Jun 09 '18 at 07:10
  • @andios are you trying to put 12 hero of of single day(dailyInfo) in list view? and such way several dailyInfo will come in listView? or just to show 12 hero of one single day? – Bashir Fardoush Jun 09 '18 at 07:58
  • actually, I update my question by adding DailyInfo class, can you check it, please? – andios Jun 09 '18 at 08:19