作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到错误: java.lang.NullPointerException: 尝试在空对象引用上调用接口(interface)方法 'int java.util.List.size()' 。我试图找出确切的问题,但无法确定确切的位置。希望有人可以提供帮助。我有 2 个单独的布局,带有 2 个单独的适配器和 ListView 。已经为此苦苦挣扎了一段时间,希望有一个解决方案。非常感谢!
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();
}
}
最佳答案
代码中唯一调用 size()
的地方是这里:
for (int i = 0; i < checkedItems.size(); i++){
假设这就是引发异常的地方,checkedItems
必须为 null
。
因此 viewContacts.getCheckedItemPositions()
必须返回 null
。
这就是我们根据您提供的信息所能提供的信息。
剩下的诊断工作就交给你了。
<小时/>更新
看来您正在使用不同的 View 调用 setContentView
两次。那是行不通的。 Activity
只有一个内容 View 。
这可能解释了 NPE。两个 View 之一不会(不能)连接到 Activity
中,这可能就是它返回 null
的原因。
您需要创建一个包含/组合两个布局的布局。或者也许在两种布局之间切换。 (不确定...)
关于java - 出现错误 java.lang.NullPointerException : Attempt to invoke interface method 'int java.util.List.size()' on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701742/
我是一名优秀的程序员,十分优秀!