GVKun编程网logo

Java。具有可能抛出参数的函数(NullpointerException)?(java存在三种可抛出异常)

26

在这篇文章中,我们将带领您了解Java。具有可能抛出参数的函数的全貌,包括NullpointerException?的相关情况。同时,我们还将为您介绍有关android–方法调用可能会产生javaNu

在这篇文章中,我们将带领您了解Java。具有可能抛出参数的函数的全貌,包括NullpointerException?的相关情况。同时,我们还将为您介绍有关android – 方法调用可能会产生java NullpointerException、Android----java.lang.NullPointerException:---java.lang.NullPointerException:、Exception in thread "main" java.lang.NullPointerException、Exception in thread "main" java.lang.NullPointerException问题的知识,以帮助您更好地理解这个主题。

本文目录一览:

Java。具有可能抛出参数的函数(NullpointerException)?(java存在三种可抛出异常)

Java。具有可能抛出参数的函数(NullpointerException)?(java存在三种可抛出异常)

当我有许多可以引发异常的表达式时,例如:

instanceObj.final_doc_type = instance.getFinalDocument().getValue().getType().getValue();instanceObj.final_doc_date = instance.getFinalDocument().getValue().getDate().toGregorianCalendar().getTime();instanceObj.appeal_date = instance.getFinalDocument().getValue().getAppealDate().getValue().toGregorianCalendar().getTime();...instanceObj.start_doc_type = instance.getStartDocument().getValue().getDocType().getValue();instanceObj.apeealed_type = instance.getStartDocument().getValue().getApeealedType().getValue();instanceObj.declarers_list_mult_id = instance.getStartDocument().getValue().getDeclarers().getValue().getString();...

有没有处理这些表达式通过某种方法 一个 功能 ,将返回一些默认值(或空)如果一个参数是无效的,并抛出一个异常-这可能发生,如果,例如:

instance.getFinalDocument().getValue().getDate() = null

这样我就不需要用try-catch块包围每个表达式或检查每个点是否为null。

答案1

小编典典

用途Optional.map

instanceObj.final_doc_type =     Optional.ofNullable(instance)      .map(Instance::getFinalDocument)      .map(Document::getValue)      .map(Value::getType)      .map(Type::getValue)      .orElse(null);

这设置final_doc_typenull链中是否有任何东西null

如果只想在非空值的情况下设置其值,请删除分配,并将其更改orElseifPresent

Optional.ofNullable(instance)    /* ... */    .ifPresent(t -> instanceObj.final_doc_type = t);

android – 方法调用可能会产生java NullpointerException

android – 方法调用可能会产生java NullpointerException

我有一个代码:
public String getNameUpdateEvent(long id) {
    Cursor mCursor =
            db.rawQuery("select name from events WHERE _id=" + id + ";",null);
    if (mCursor != null) {
        mCursor.movetoFirst();
    }
    String updateNameEvent;
    updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    return updateNameEvent;
}

我得到一个警告

Warning:(173,45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'java.lang.NullPointerException'

我可以修复它吗?

解决方法

你的光标不能为null,它将始终有任何值.但是光标可以是空的,所以你应该首先使用movetoFirst()方法去游标中的第一行,如果它返回true,这意味着该游标至少有一行,所以你可以用它来完成所有的操作,如果它返回false – 这意味着您的查询没有任何内容,因此您没有任何行可以获取数据.你的代码应该是这样的:
public String getNameUpdateEvent(long id) {
    Cursor mCursor =
        db.rawQuery("select name from events WHERE _id=" + id + ";",null);

    String updateNameEvent = null;
    if (mCursor != null && mCursor.movetoFirst()) {
        updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    }
    return updateNameEvent;
}

Android----java.lang.NullPointerException:---java.lang.NullPointerException:

Android----java.lang.NullPointerException:---java.lang.NullPointerException:

2021-03-06 13:26:12.274 8544-8544/com.example.helloworld E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.helloworld,PID: 8544
java.lang.NullPointerException:: Unable to start activity ComponentInfo{com.example.helloworld/com.example.helloworld.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setonCheckedchangelistener(android.widget.CompoundButton$OnCheckedchangelistener)' on a null object reference
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3897)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setonCheckedchangelistener(android.widget.CompoundButton$OnCheckedchangelistener)' on a null object reference
at com.example.helloworld.MainActivity.setListener(MainActivity.java:161)
at com.example.helloworld.MainActivity.onCreate(MainActivity.java:138)
at android.app.Activity.performCreate(Activity.java:8085)
at android.app.Activity.performCreate(Activity.java:8073)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3870)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:219) 
at android.app.ActivityThread.main(ActivityThread.java:8349) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 
2021-03-06 13:26:12.282 8544-8544/com.example.helloworld I/Process: Sending signal. PID: 8544 SIG: 9

 

检查一下xml文件定义的checkBox的id和在activity里获取的id是否一致

问题出在运行时找不到对应的checkBox

 

 

Process: com.example.helloworld,PID: 21319
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.helloworld/com.example.helloworld.MoreActivity}: java.lang.illegalaccessexception: java.lang.class<com.example.helloworld.MoreActivity> is not accessible from java.lang.class<android.app.AppComponentFactory>
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3815)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Caused by: java.lang.illegalaccessexception: java.lang.class<com.example.helloworld.MoreActivity> is not accessible from java.lang.class<android.app.AppComponentFactory>
at java.lang.class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
at android.app.Instrumentation.newActivity(Instrumentation.java:1264)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3800)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:219) 
at android.app.ActivityThread.main(ActivityThread.java:8349) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 

 

这是在清单文件没有注册activity

所有的activity类都必须是public 的 不然清单文件找不到,所以就无法运行

 

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference;

这和问题一是一样的,因为找不到对应的id

博主链接:https://blog.csdn.net/qq_42618969/article/details/81141895

 

 

 

 

页面布局常用:

android:id 为控件指定相应的ID
android:text 指定控件的文本,置尽量使用strings.xml
android:grivity 指定控件的基本位置 ,比如举重,居右,
android:padding 指定控件的内边距,控件当中的内容
android:singleLine 如果设置为真的话,则将控件的内容在同一行当中显示

android:layout_above 将该空间的底部至于给定ID的空间之上
android:layout_below: 将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf: 将该控件的右边缘和给定ID的控件的左 边缘对其
android:layout_toRightOf 将该控件的左边缘和给定的ID的控件的右边缘对齐

android:layout_alignBaseLine 该控件的baseline和给定ID的控件的Baseline对齐
android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘
android:layout_alignLeft 将该控件左边缘与给定ID控件的左边缘对齐
android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐
android:layout_alignTop 将给定控件的顶部边缘与给定ID控件的顶部对齐

android:alignParentBottom 如果该值为true 则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft 如果该值为true则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight 如果该值为true则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop 将控件的顶部与父控件的顶部对齐

android:layout_centerHorizontal 如果值为真,该控件将被至于水平方向的中央
android:layout_centerInParent 将被至于父控件水平方向和垂直都居中
android:layout_centerVertical 将被至于垂直方向的中央

第一类:属性值为true或false

android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为id的引用名“@id/id-name”

android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

第三类:属性值为具体的像素值,如30dip,40px

android:layout_marginBottom 离父控件底边缘的距离
android:layout_marginLeft 离父控件左边缘的距离
android:layout_marginRight 离父控件右边缘的距离
android:layout_marginTop 离父控件上边缘的距离

EditText的android:hint
设置EditText为空时输入框内的提示信息。

android:gravity 
android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右

android:layout_gravity
android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,

android:layout_gravity=”right”则button靠右

android:layout_alignParentRight
使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。

padding和margin的区别:
所以padding是定义控件自己的内容和控件边缘之间的距离,padding有填充填料的意思,而margin是在说控件的四个边缘之外的距离,指的是和别的控件之间的距离,margin有边缘,页面留白的意思


原文链接:https://blog.csdn.net/qq_28296925/article/details/51115132

 

Exception in thread

Exception in thread "main" java.lang.NullPointerException

Exception in thread "main" java.lang.NullPointerException
at com.javaeasy.logcarinterface.TrafficRecoderForLog.recordTransport(TrafficRecoderForLog.java:12)
at com.javaeasy.logcarinterface.test.main(test.java:11)


package com.javaeasy.logcarinterface;
import com.javaeasy.transport.Bus;
import com.javaeasy.transport.CarBase;
import com.javaeasy.transport.Bike;


public class test {
	public static void main(String[] args){
	CarBase base=new CarBase(40,"广汽本田","黑色");
	Bus bus=new Bus(30,"一汽迈腾","白色");
	TrafficRecoderForLog.recordTransport(base);
	TrafficRecoderForLog.recordTransport(bus);
	Bike bike=new Bike(10,"Memorid");
	TrafficRecoderForLog.recordTransport(bike);
}
}



明明跟着书一步一步来 为什么会报错?? 对象都已经创建好了啊



Exception in thread

Exception in thread "main" java.lang.NullPointerException问题

Java调用百度API做的车牌识别,但是最后运行的时候总是报错

麻烦哪位大佬帮帮忙啊,谢谢了!!

Exception in thread "main" java.lang.NullPointerException
    at main.SWT_Main.sample(SWT_Main.java:110)
    at main.SWT_Main.main(SWT_Main.java:95)


//源码

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONObject;
import com.baidu.aip.imageclassify.AipImageClassify;
public class SWT_Main {
    //填入自己申请的AAP_ID APP_KEY SECRET_KEY
    public static final String APP_ID = "16723787";
    public static final String API_KEY = "yKdp5BBe6afgcPgqaAhjLzPr";
    public static final String SECRET_KEY = "EH0z03sp82AQNH7PNKa3w0C6GYVoTnwe";
    public static void main(String[] args) {
        AipImageClassify aic = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);
        sample(aic);   //第95行
        }    
    public static void sample(AipImageClassify client) {
        HashMap<String, String> options = new HashMap<String, String>();
        String color = null;   
        String type = null;
        options.put("top_num", "3");   
        options.put("baike_num", "0");   
        String path = "E:\\image\\timg.jpg";   
        File file = new File(path);
        File[] files = file.listFiles();
        try {    
            BufferedWriter bufw = new BufferedWriter(new FileWriter("D://carInfo.txt"));
            bufw.write("文件名$车型1$车型2$车型3$颜色");
            bufw.newLine();
            for(int i=0;i<files.length;i++) {    //第110行
                System.out.println(files[i].getName());  
                String image = files[i].getAbsolutePath();
                bufw.write(files[i].getName()+"$");
                JSONObject res = client.carDetect(image, options);
            
                JSONArray results = res.getJSONArray("result");   
                for(int j = 0;j<results.length();j++) {
                    JSONObject obj = (JSONObject)results.get(j);   
                    type = (String) obj.get("name"); 
                    bufw.write(type+"$");
                    }
                color = (String) res.get("color_result");  
                bufw.write(color);
                bufw.newLine();    
                bufw.flush();
                }
            bufw.flush();
            bufw.close();    
            } catch (IOException e) {    
                e.printStackTrace();
                }    
        }
    }

今天的关于Java。具有可能抛出参数的函数NullpointerException?的分享已经结束,谢谢您的关注,如果想了解更多关于android – 方法调用可能会产生java NullpointerException、Android----java.lang.NullPointerException:---java.lang.NullPointerException:、Exception in thread "main" java.lang.NullPointerException、Exception in thread "main" java.lang.NullPointerException问题的相关知识,请在本站进行查询。

本文标签: