2016-11-15 83 views
1

listview錯誤,但我不知道確切的位置。listView上的NullPointerException

使用onClick從其他活動開始Main2Activity(此活動)時發生錯誤。

這裏是我的代碼:

MainActivity

public class Main2Activity extends AppCompatActivity { 
private Firebase rootUrl; 
private Firebase urlCurrenUser; 
private Firebase urlAllUser; 
private AuthData mAuthData; 
private Firebase.AuthStateListener mAuthStateListener; 
private String currenUserId; 
private String currenUserEmail; 
private ArrayList<User> arrUser; 
private AllUserAdapter allUserAdapter; 
private ArrayList<String> arrStringEmail; 
private ValueEventListener valueEventListenerUserConnected; 
private User currenUser; 
//@BindView(R.id.btnLogout) 
Button btnLogout; 
//@BindView(R.id.lvUser) 
ListView lvUser; 
// @BindView(R.id.tvUsserName) 
TextView tvUsserName; 

Firebase ref ; 

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

    lvUser = (ListView) findViewById(R.id.lvUser); 

    ButterKnife.bind(this); 
    Main2Activity.this.startService(new Intent(Main2Activity.this, LocationService.class)); 
    arrStringEmail = new ArrayList<>(); 
    arrUser = new ArrayList<User>(); 
    allUserAdapter = new AllUserAdapter(Main2Activity.this, 0, arrUser); 
    lvUser.setAdapter(allUserAdapter); 
    lvUser.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent=new Intent(Main2Activity.this,MapsActivity.class); 
      User user=arrUser.get(position); 
      Gson gson=new Gson(); 
      intent.putExtra(Constant.KEY_SEND_USER,gson.toJson(user).toString()+"---"+gson.toJson(currenUser).toString()); 
      startActivity(intent); 
     } 
    }); 
    rootUrl = new Firebase(Constant.FIREBASE_CHAT_URL); 
    mAuthStateListener = new Firebase.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(AuthData authData) { 
      setAuthenticatedUser(authData); 
     } 
    }; 
    rootUrl.addAuthStateListener(mAuthStateListener); 
} 

private void setAuthenticatedUser(AuthData authData) { 
    mAuthData = authData; 
    if (authData != null) { 
     currenUserId = authData.getUid(); 
     currenUserEmail = (String) authData.getProviderData().get(Constant.KEY_EMAIL); 
     getCurrenUser(authData); 
     getAllUser(authData); 
    } 
    else { 
     startActivity(new Intent(Main2Activity.this, LoginActivity.class)); 
     finish(); 
    } 
} 


public void getCurrenUser(AuthData authData) { 
    urlCurrenUser = new Firebase(Constant.FIREBASE_CHAT_URL).child(Constant.CHILD_USERS).child(authData.getUid()); 
    urlCurrenUser.addValueEventListener(valueEventListenerCurrenUser); 
    valueEventListenerUserConnected=rootUrl.getRoot().child(".info/connected").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      boolean connected = (Boolean) dataSnapshot.getValue(); 
      if (connected) { 
       urlCurrenUser.child(Constant.CHILD_CONNECTION).setValue(Constant.KEY_ONLINE); 
       urlCurrenUser.child(Constant.CHILD_CONNECTION).onDisconnect().setValue(Constant.KEY_OFFLINE); 
      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
} 
private ValueEventListener valueEventListenerCurrenUser = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     User user = dataSnapshot.getValue(User.class); 
     tvUsserName.setText("Hello "+user.name); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}; 
public void getAllUser(AuthData authData) { 
    urlAllUser = new Firebase(Constant.FIREBASE_CHAT_URL).child(Constant.CHILD_USERS); 
    urlAllUser.addChildEventListener(childEventListenerAllUser); 
} 
private ChildEventListener childEventListenerAllUser = new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     User user = dataSnapshot.getValue(User.class); 
     if (!dataSnapshot.getKey().equals(currenUserId)){ 
      arrStringEmail.add(user.email); 
      arrUser.add(user); 
      allUserAdapter.notifyDataSetChanged(); 
     }else { 
      currenUser=user; 
     } 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     if (!dataSnapshot.getKey().equals(currenUserId)){ 
      User user = dataSnapshot.getValue(User.class); 
      int index = arrStringEmail.indexOf(user.email); 
      arrUser.set(index, user); 
      allUserAdapter.notifyDataSetChanged(); 
     } 
    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 
    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}; 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    try { 
     rootUrl.removeAuthStateListener(mAuthStateListener); 
    } catch (Exception e) { 
    } 
    try { 
     urlCurrenUser.removeEventListener(valueEventListenerCurrenUser); 
    } catch (Exception e) { 
    } 
    try { 
     urlAllUser.removeEventListener(childEventListenerAllUser); 
    } catch (Exception e) { 
    } 
    try { 
     rootUrl.getRoot().child(".info/connected").removeEventListener(valueEventListenerUserConnected); 
    }catch (Exception e){} 
} 

@Optional 
@OnClick({R.id.btnLogout}) 
public void onClick(View view) { 
    if (this.mAuthData != null) { 
     stopService(new Intent(this, LocationService.class)); 
     urlCurrenUser.child(Constant.CHILD_CONNECTION).setValue(Constant.KEY_OFFLINE); 
     rootUrl.removeAuthStateListener(mAuthStateListener); 
     rootUrl.unauth(); 
     setAuthenticatedUser(null); 
    } 
} 


public class AllUserAdapter extends ArrayAdapter<User> { 
    private Activity mActivity; 
    private ArrayList<User> mArrUser; 
    @BindView(R.id.tvNameUser) 
    TextView tvNameUser; 
    @BindView(R.id.tvStatus) 
    TextView tvStatus; 

    public AllUserAdapter(Activity mActivity, int resource, ArrayList<User> mArrUser) { 
     super(mActivity, resource, mArrUser); 
     this.mActivity = mActivity; 
     this.mArrUser = mArrUser; 
    } 


    @NonNull 
    @Override 
    public View getView(int position, View convertView, @NonNull ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater layoutInflater = mActivity.getLayoutInflater(); 
      convertView = layoutInflater.inflate(R.layout.item_list_user,null); 
     } 
     ButterKnife.bind(this, convertView); 
     tvNameUser.setText(mArrUser.get(position).name); 
     tvStatus.setText(mArrUser.get(position).connecttion); 
     if (mArrUser.get(position).connecttion.equals(Constant.KEY_ONLINE)){ 
      tvStatus.setTextColor(Color.parseColor("#00FF00")); 
     }else { 
      tvStatus.setTextColor(Color.parseColor("#FF0000")); 
     } 
     return convertView; 
    } 
} 

} 

這裏是我的佈局:

<ListView 
    android:id="@+id/lvUser" 
    android:layout_below="@+id/tvUsserName" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</ListView> 


<Button 
    android:id="@+id/btnLogout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:text="Log out" 
    android:layout_alignParentRight="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/tvUsserName" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

登錄貓是這樣的:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
     at 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
+0

爲什麼Butterknife註釋被註釋掉了? – vzsg

回答

2

也許你使用錯誤的佈局,在這一行setContentView(R.layout.activity_main);

+0

Woow該死的我沒有看到,我覺得自己像盲人一樣.. ThnQ Man :) – Ibrahim

+0

發生在我身上的事也太沒有了biggie –

相關問題