I am getting the error: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference . I am trying to figure out the exact problem but unable to pinpoint the exact location. Was hoping someone could potentially help. I have 2 separate layouts with 2 separate adapters and list views. Been struggling on this for a while and would appreciate a solution. Much Appreciated!
public class viewContacts extends AppCompatActivity {
private static final String TAG = viewContacts.class.getSimpleName();
ListView listView_Android_Contacts;
ListView viewContacts;
View currentSelected;
Cursor c;
String contactName;
CardView saveContacts;
String phoneNumber;
CheckBox cb;
String currentContactName;
ArrayList<String> selectedContacts;
ArrayList<String> contacts;
ArrayList<String> listMessages;
LinearLayout linearMain;
ListView currentContactsList;
String contactEntry;
public List<String> savedContacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts_list);
final ListView currentContactsList = findViewById(R.id.currentContactsList);
setContentView(R.layout.activity_view_contacts);
saveContacts = findViewById(R.id.saveContacts);
final ListView viewContacts = findViewById(R.id.contactsView);
Dexter.withActivity(this)
.withPermission(Manifest.permission.READ_CONTACTS)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
get();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
// check for permanent denial of permission
if (response.isPermanentlyDenied()) {
// navigate user to app settings
}
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
token.continuePermissionRequest();
}
}).check();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_multiple_choice, contacts
);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, selectedContacts);
viewContacts.setAdapter(adapter);
currentContactsList.setAdapter(arrayAdapter);
viewContacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedFromList = (String) viewContacts.getItemAtPosition(position);
Toast.makeText(viewContacts.this, selectedFromList,Toast.LENGTH_SHORT).show();
}
});
saveContacts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedContacts = new ArrayList<>();
List<Integer> checkedIDs = new ArrayList<Integer>();
final SparseBooleanArray checkedItems = viewContacts.getCheckedItemPositions();
for (int i = 0; i < checkedItems.size(); i++){
final boolean isChecked = checkedItems.valueAt(i);
if (isChecked){
final int position = checkedItems.keyAt(i);
String s = (String) viewContacts.getItemAtPosition(position);
selectedContacts.add(s);
checkedIDs.add(position);
}
}
startActivity(new Intent(viewContacts.this, contactsList.class));
}
});
}
public void get(){
c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME );
contacts = new ArrayList<>();
while(c.moveToNext()){
contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contacts.add( contactName + "\n" + phoneNumber);
Log.d(TAG, "show contacts:");
}
c.close();
}
}