gpt4 book ai didi

java - HTC Sensation 上的 NPE,在模拟器中工作

转载 作者:太空狗 更新时间:2023-10-29 14:31:22 26 4
gpt4 key购买 nike

我已经使用一些代码创建了一个简单的应用程序来允许添加联系方式。代码非常简单,在模拟器和我拥有的许多设备上运行良好,但在新的 HTC Sensation 上除外。

代码如下:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.build());

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, number.getText().toString().trim())
.withValue(Phone.TYPE, "TYPE_MOBILE")
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE,
StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name.getText().toString().trim())
.build());
try {
ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

当我运行它时,我得到以下信息:

java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1328)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
at android.database.DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.applyBatch(ContentProviderNative.java:491)
at android.content.ContentProviderClient.applyBatch(ContentProviderClient.java:95)
at android.content.ContentResolver.applyBatch(ContentResolver.java:641)
at uk.co.androidfun.getthatnumber.mainActivity.saveCallContact(mainActivity.java:157)
at uk.co.androidfun.getthatnumber.mainActivity$3.onClick(mainActivity.java:74)
at android.view.View.performClick(View.java:2532)
at android.view.View$PerformClick.run(View.java:9277)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4196)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

我查看并查看了代码,但没有发现任何问题,正如我所说,在运行 2.3.3 的模拟器中运行良好,但在运行相同的手机上却不行。

谢谢约翰

最佳答案

我知道这是一个老问题,但我也被那个奇怪的 NPE 击中了,所以这可能会对某人有所帮助。

经过一些挖掘,我发现我给 newInsert 的值之一是错误的类型(该死的重构!)我有:

String val = ...;
builder.withValue(Data.RAW_CONTACT_ID, val);

代替:

long val = ...;
builder.withValue(Data.RAW_CONTACT_ID, val);

解决 NPE 的修复。

因此,查看您的代码,我首先将“TYPE_MOBILE”更改为 Android const CommonDataKinds.Phone.TYPE_MOBILE(因为此值可能会因不同的供应商而异),其次,确保您在 withValue 中使用的所有键与您提供的键类型相同(不确定“null”对于 ACCOUNT_TYPE 是否合法) , 并打印修剪后的字符串以确保它们具有有意义的值。

希望这对您有所帮助!

关于java - HTC Sensation 上的 NPE,在模拟器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com