本文将为您提供关于将Null-Object取消装箱成原始类型会导致NullPointerException,好吗?的详细介绍,我们还将为您解释取消对null指针的引用怎么改的相关知识,同时,我们还将为
本文将为您提供关于将Null-Object取消装箱成原始类型会导致NullPointerException,好吗?的详细介绍,我们还将为您解释取消对null指针的引用怎么改的相关知识,同时,我们还将为您提供关于Android Studio:取消装箱“ xxx”可能会产生“ java.lang.NullPointerException”、android – 在onDestory()中停止/释放Mediaplayer会导致NullPointerException、android – 实现包含List的Parcelable接口的Object抛出NullPointerException、android – 照片捕获意图仅在Samsung手机上导致NullPointerException的实用信息。
本文目录一览:- 将Null-Object取消装箱成原始类型会导致NullPointerException,好吗?(取消对null指针的引用怎么改)
- Android Studio:取消装箱“ xxx”可能会产生“ java.lang.NullPointerException”
- android – 在onDestory()中停止/释放Mediaplayer会导致NullPointerException
- android – 实现包含List的Parcelable接口的Object抛出NullPointerException
- android – 照片捕获意图仅在Samsung手机上导致NullPointerException
将Null-Object取消装箱成原始类型会导致NullPointerException,好吗?(取消对null指针的引用怎么改)
NullPointerException
由于该片段未装箱成原始类型,因此Long.longValue()
被称为是,所以抛出了一个片段。
甚至很容易看出您是否有如下代码段:
long value = (Long) null;
但是在NullPointerException
像这样的更复杂的情况下更难实现:
long propertyValue = (Long) obj.getProperty(propertyModel.getName());
那么Java编译器是否有可能因此而做出更舒适的Exception?我更喜欢这样IllegalArgumentException
的消息,例如
“您正在尝试将null对象转换为原始类型,这无法完成!”
这会更合适吗?你怎么看?在运行时甚至可能吗?我们能确定这个演员吗?我还没有看过Java字节码。也许可以在解决方案中使用它。
可以回答这个问题 :我想知道是否有可能实现这种行为!
答案1
小编典典根据Java语言规范,拆箱是通过调用Number.longValue()
,Number.intValue()
等进行的。没有特殊的字节码魔术发生,这与您手动调用这些方法完全相同。因此,这NullPointerException
是将a拆箱的自然结果null
(实际上是JLS要求的)。
引发不同的异常将需要在每次拆箱转换期间检查null
两次
(一次以确定是否引发特殊异常,而在实际调用该方法时隐式地进行一次检查)。我想语言设计者认为它没有足够的用处。
Android Studio:取消装箱“ xxx”可能会产生“ java.lang.NullPointerException”
我正在关注Android图书示例:
//Get the drink from the intent
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
Drink drink = Drink.drinks[drinkIdd];
该项目可以在Android Studio中运行,但在线上带有黄色警告:
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
与:
info: Unboxing of '(Integer)getIntent().getExtras().get(EXTRA_DRINKID)' may produce 'java.lang.NullPointerException'
根据我的理解,get(EXTRA_DRINKID)
返回一个Object,然后(Integer)将其转换为int类型,以与满足int
drinkIdd
。
- 您能告诉我该信息的确切含义吗,对于初学者来说,您的回答将是值得的。
- 我可以这样写上限吗?使用 () 将getIntent()。getExtras()。get()打包为一个整体,因为它最终返回了一个对象,然后将其转换为int。
int drinkIdd = (Integer)(getIntent().getExtras().get(EXTRA_DRINKID));
android – 在onDestory()中停止/释放Mediaplayer会导致NullPointerException
void StartSound(final String ReaderPath) { mediaplayer = MediaPlayer.create(test2.this,Uri.parse(ReaderPath)); try { mediaplayer.start(); mediaplayer.setonCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { current++; try { mp.reset(); mp.setDataSource(ReaderPath); mp.prepare(); } catch (Exception e) { e.printstacktrace(); } mp.start(); } }); } catch (Exception e) { } } @Override protected void onPause() { if (mediaplayer != null && mediaplayer.isPlaying()) mediaplayer.pause(); super.onPause(); } @Override protected void onStop() { if (mediaplayer != null && mediaplayer.isPlaying()) { mediaplayer.release(); mediaplayer.stop(); } super.onDestroy(); }
logcat的:
08-21 22:52:26.512: E/AndroidRuntime(16410): java.lang.RuntimeException: Unable to destroy activity {com.example.test/com.example.test.test2}: java.lang.NullPointerException 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3235) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3253) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread.access$1200(ActivityThread.java:132) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1190) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.os.Handler.dispatchMessage(Handler.java:99) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.os.Looper.loop(Looper.java:137) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread.main(ActivityThread.java:4575) 08-21 22:52:26.512: E/AndroidRuntime(16410): at java.lang.reflect.Method.invokeNative(Native Method) 08-21 22:52:26.512: E/AndroidRuntime(16410): at java.lang.reflect.Method.invoke(Method.java:511) 08-21 22:52:26.512: E/AndroidRuntime(16410): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 08-21 22:52:26.512: E/AndroidRuntime(16410): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-21 22:52:26.512: E/AndroidRuntime(16410): at dalvik.system.NativeStart.main(Native Method) 08-21 22:52:26.512: E/AndroidRuntime(16410): Caused by: java.lang.NullPointerException 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1406) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1876) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:316) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.Activity.performDestroy(Activity.java:4629) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1079) 08-21 22:52:26.512: E/AndroidRuntime(16410): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3222) 08-21 22:52:26.512: E/AndroidRuntime(16410): ... 11 more
为什么是这样?
解决方法
答案可能是您在调用release()后调用MediaPlayer上的stop().一旦调用release(),MediaPlayer就会失效并且不再可用.
android – 实现包含List的Parcelable接口的Object抛出NullPointerException
我正在尝试使用Parcelable接口创建一个包含可对象列表的对象.我无法读回Parcel对象.
谁能指出我正确的方向?我在这里错过了什么?
MyParcelable对象:
public class MyParcelable implements Parcelable {
private int myInt = 0;
private List<MyListClass> arrList;
public List<MyListClass> getArrList() {
return arrList;
}
public void setArrList(List<MyListClass> arrList) {
this.arrList = arrList;
}
public int getMyInt() {
return myInt;
}
public void setMyInt(int myInt) {
this.myInt = myInt;
}
MyParcelable() {
// initialization
arrList = new ArrayList<MyListClass>();
}
public MyParcelable(Parcel in) {
myInt = in.readInt();
in.readTypedList(arrList, MyListClass.CREATOR);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writetoParcel(Parcel outParcel, int flags) {
outParcel.writeInt(myInt);
outParcel.writeTypedList(arrList);
}
public static final Parcelable.Creator<MyParcelable> CREATOR =
new Parcelable.Creator<MyParcelable>() {
@Override
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
@Override
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
}
MyListClass对象:
public class MyListClass implements Parcelable{
private int test;
public MyListClass()
{}
public MyListClass(Parcel read){
test = read.readInt();
}
public int gettest() {
return test;
}
public void setTest(int test) {
this.test = test;
}
public static final Parcelable.Creator<MyListClass> CREATOR =
new Parcelable.Creator<MyListClass>() {
@Override
public MyListClass createFromParcel(Parcel source) {
return new MyListClass(source);
}
@Override
public MyListClass[] newArray(int size) {
return new MyListClass[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writetoParcel(Parcel arg0, int arg1) {
arg0.writeInt(test);
}
}
解决方法:
问题是,当MyParcelable对象的创建者调用从中重构对象的Parcel的私有构造函数时,ArrayList仍然未初始化,因此为null.
现在,方法调用readTypedList()尝试将Parcels内容写入您指定的ArrayList,该ArrayList抛出NullPointerEception,因为它尚未初始化.
解决方案是在调用该方法之前初始化ArrayList.
public MyParcelable(Parcel in) {
myInt = in.readInt();
arrList = new ArrayList<MyListClass>();
in.readTypedList(arrList, MyListClass.CREATOR);
}
android – 照片捕获意图仅在Samsung手机上导致NullPointerException
下面的实现.
final Button capture = (Button)findViewById(R.id.capture_button); capture.setonClickListener(new OnClickListener() { @Override public void onClick(View v) { // Todo Auto-generated method stub Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent,CAMERA_PIC_REQUEST); } }); protected void onActivityResult(int requestCode,int resultCode,Intent data) { if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap)data.getExtras().get("data"); ImageView image = (ImageView)findViewById(R.id.photoResultView); image.setimageBitmap(thumbnail); } }
解决方法
但是,在非三星手机上使用此修复会返回错误的图像,因此我将使用
if(imageURI != null) { // do it the normal way else { // do it the "Samsung" way }
我们今天的关于将Null-Object取消装箱成原始类型会导致NullPointerException,好吗?和取消对null指针的引用怎么改的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android Studio:取消装箱“ xxx”可能会产生“ java.lang.NullPointerException”、android – 在onDestory()中停止/释放Mediaplayer会导致NullPointerException、android – 实现包含List的Parcelable接口的Object抛出NullPointerException、android – 照片捕获意图仅在Samsung手机上导致NullPointerException的相关信息,请在本站查询。
本文标签: