Android 返回NullPointerException的联系人游标
我使用以下代码获取收件箱中短信的联系人姓名。当我尝试以下代码时,它在某种程度上都可以正常工作,但在获取一半的名称后,会给出NullPointerException:Android 返回NullPointerException的联系人游标,android,sms,cursor,android-contacts,Android,Sms,Cursor,Android Contacts,我使用以下代码获取收件箱中短信的联系人姓名。当我尝试以下代码时,它在某种程度上都可以正常工作,但在获取一半的名称后,会给出NullPointerException: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_smscontacts); Uri uri=Uri.parse("
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smscontacts);
Uri uri=Uri.parse("content://sms/inbox");
Cursor cursor=getContentResolver().query(uri, null, null, null, null);
Cursor cur=null;
int Count=0;
while(cursor.moveToNext())
{
String address=cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
if (address != null)
{
Uri person=Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(address));
String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };
cur=getContentResolver().query(person, projection, null, null, null);
if(cur.moveToNext())
{
Log.i("Name", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
Log.i("count", Count++ + "");
}
else
Log.i("cursor", "Null" + address);
}
else
Log.i("address", "Null");
}
cur.close();
cursor.close();
Log.i("count", Count + "");
}
LogCat如下所示:
06-29 15:04:41.509: E/AndroidRuntime(28700): FATAL EXCEPTION: main
06-29 15:04:41.509: E/AndroidRuntime(28700): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lovish.smscontactsdummy/com.lovish.smscontactsdummy.SMSContactsActivity}: java.lang.NullPointerException
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread.access$700(ActivityThread.java:134)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.os.Looper.loop(Looper.java:137)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread.main(ActivityThread.java:4856)
06-29 15:04:41.509: E/AndroidRuntime(28700): at java.lang.reflect.Method.invokeNative(Native Method)
06-29 15:04:41.509: E/AndroidRuntime(28700): at java.lang.reflect.Method.invoke(Method.java:511)
06-29 15:04:41.509: E/AndroidRuntime(28700): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
06-29 15:04:41.509: E/AndroidRuntime(28700): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
06-29 15:04:41.509: E/AndroidRuntime(28700): at dalvik.system.NativeStart.main(Native Method)
06-29 15:04:41.509: E/AndroidRuntime(28700): Caused by: java.lang.NullPointerException
06-29 15:04:41.509: E/AndroidRuntime(28700): at com.lovish.smscontactsdummy.SMSContactsActivity.onCreate(SMSContactsActivity.java:38)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.Activity.performCreate(Activity.java:5047)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
06-29 15:04:41.509: E/AndroidRuntime(28700): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2045)
06-29 15:04:41.509: E/AndroidRuntime(28700): ... 11 more
请帮我解决这个问题 在
while
循环之后,作为一种快速修复方法,将以下内容放在下面:
if (cur != null)
cur.close();
如果有疑问,请使用调试器。我在Eclipse中不到一分钟就诊断出了这个问题…在查询之后,您可以尝试在调用cur.moveToNext()之前检查cur=null。没有再次出现相同的问题…它是在前面的消息中检查cur=null之后输入的,但再次出现问题并开始将cur返回为null。也许您可以在(!cursor.isAfterLast())时尝试一下然后将cursor.moveToNext()放在循环的底部,在哪个光标中看到错误?后logcat aswell@AndroidNoob…仍然是同一个问题我知道它工作了这么多…:)我确实使用了调试器…但直到今天我还是遇到了这样的错误…所以我每天都在努力学习更多…:)