java.lang.NullPointerException错误是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.NullPointerException错误是啥意思相关的知识,希望对你有一定的参考价值。

安卓APP的错误提示是java.lang.NullPointerException,这是一个什么错误呢?更多信息见图。谢谢

java.lang.NullPointerException
at goldendawn.getimei.ui.MainActivity$13.onClick(MainActivity.java:596)
at android.view.View.performClick(View.java:4202)
at android.view.View$PerformClick.run(View.java:17340)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

java.lang.NullPointerException具体意思是空指针异常,最常见的问题就是没有初始化。

在Java中一般报空指针异常的原因有以下几种: 

1、字符串变量未初始化; 

2、接口类型的对象没有用具体的类初始化,比如: 

List lt;会报错 

List lt = new ArrayList();则不会报错了 

3、当一个对象的值为空时,没有判断为空的情况。可以试着把下面的代码前加一行代码: 

if(rb!=null && rb!="") 

改成: 

if(rb==null); 

if(rb!==null&&rb!="") 或者if((“”).equals(rb)) 

扩展资料:

java.lang包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。

类 Math 提供了常用的数学函数,比如正弦、余弦和平方根。类似地,类 String 和 StringBuffer 提供了常用的字符串操作。

类 ClassLoader、Process、Runtime、SecurityManager 和 System 提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和安全策略实施等“系统操作”。

类 Throwable 包含了可能由 throw 语句抛出的对象(§14.16)。Throwable 的子类表示错误和异常。

参考技术A

java.lang.NullPointerException是java常见的异常, 中文常常翻译为 空指针异常.

触发条件: 当一个对象为空(null)时,  试图调用对象的方法, 或者访问或者修改对象的属性时 ,就会抛出空指针异常. 

解决该异常的办法: 

    尽量避免使用为空的对象,

    或者先判断是否为null 然后再使用,

    或者使用try catch 捕获到该异常后处理这个异常. 

参考代码

错误示范

public class Demo 
public static void main(String[] args) 
String str = null;
if(str.equals("ABC"))  //str为空,调用str的equals方法, 就会报错
System.out.println("字符串的内容是ABC");
else 
System.out.println("字符串的内容不是ABC");


解决示范1

public class Demo 
public static void main(String[] args) 
String str = null;
if("ABC".equals(str))  //使用"ABC"这个不为null的对象,调用他的equals方法
System.out.println("字符串的内容是ABC");
else 
System.out.println("字符串的内容不是ABC");


示范2: 先判断是否为空, 不为空, 才调用方法和访问属性

public class Demo 
static String str1;
public static void main(String[] args) 
if(str1!=null) //先判断它不为空,才调用 它的length方法
System.out.println(str1.length());
else 
System.out.println("str1对象为空");


示范3

import java.util.Scanner;

public class Demo 
static String str1;
public static void main(String[] args) 
try 
System.out.println(str1.length());
catch(NullPointerException e) 
System.out.println("str1为空...请赋值..");
Scanner sc  = new Scanner(System.in);
str1 = sc.nextLine();
System.out.println("str1的长度为:"+str1.length());




//str1为空...请赋值..
//ABC
//str1的长度为:3

参考技术B 这是APP程序设计不周导致的。
从你提供的错误信息来看,该APP由JAVA开发,java.lang.NullPointerException在java中是指空指针异常,是在程序的某一处未取得合法的内存指针数据导致的错误。
你贴的图在JAVA编程中叫做异常堆栈,指的是异常发生之前调用的程序中的过程。
参考技术C 最直接的告诉你吧:就是你用一个null对象调用了它的某一个方法导致的。本回答被提问者采纳 参考技术D 你使用了空的指针。在java中虽然号称抛弃了C++中不安全的指针,但其实他所有的东西你都可以理解为指针。这种情况一般发生在你使用了一个对象实例(其实是一个类指针)来调用它的成员函数,但这个实例却为null。
建议先检查一下你的SQL是不是有问题,然后看你的逻辑是不是有问题
主要有以下几种原因:
1、使用了未初始化的变量(虽然已经声明)
2、使用了未初始化的对象(虽然已经声明)
3,使用了关键字或已存在的类名作变量对象方法或类名。

一般报java.lang.NullPointerException的原因有以下几种:
1字符串变量未初始化;
2接口类型的对象没有用具体的类初始化,比如:
List lt;会报错
List lt = new ArrayList();则不会报错了
3当一个对象的值为空时,你没有判断为空的情况。
你可以试着把下面的代码前加一行代码:
if(rb!=null && rb!="")
改成:
if(rb==null);
if(rb!==null&&rb!="")

如何使用其id获取单个SQLite行数据?

我已成功将SQLite数据检索到ListView。现在我正在尝试实现OnItemClickListener以在Dialog中显示数据但我收到此错误

2019-04-08 18:42:53.020 20591-20591/com.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app, PID: 20591
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:292)
        at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262)
        at com.app.SQLiteAdaptor.GetUserByUserId(SQLiteAdaptor.java:99)
        at com.app.OrderHistory$1.onItemClick(OrderHistory.java:64)
        at android.widget.AdapterView.performItemClick(AdapterView.java:318)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1181)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3165)
        at android.widget.AbsListView$3.run(AbsListView.java:4147)
        at android.os.Handler.handleCallback(Handler.java:794)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:173)
        at android.app.ActivityThread.main(ActivityThread.java:6634)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:822)

这是我需要检索行的地方


 @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                final Dialog fullscreenDialog = new Dialog(getApplicationContext(), R.style.Dialog);
                    fullscreenDialog.setContentView(R.layout.dialog_oh);


                SQLiteAdaptor db = new SQLiteAdaptor(c);
                ArrayList<HashMap<String, String>> userList = db.GetUserByUserId(i); //Line 64
                HashMap<String, String> hashDetails = userList.get(0);

                     //Use this index accordingly
                    tvit.setText(hashDetails.get("item"));
                    tvpr.setText(hashDetails.get("price"));
                    tvqu.setText(hashDetails.get("quantity"));
                    tvad.setText(hashDetails.get("address"));
                    tvna.setText(hashDetails.get("name"));
                    tvem.setText(hashDetails.get("email"));
                    tvtim.setText(hashDetails.get("time"));

fullscreenDialog.show();
}
});

以下是id方法片段的SQLiteAdaptor获取行数据


 public ArrayList<HashMap<String, String>> GetUserByUserId(int userid ){
        SQLiteDatabase db = this.getReadableDatabase(); \\Line 99
        ArrayList<HashMap<String, String>> userList = new ArrayList<>();
        String  query = "SELECT item, price, quantity, name, address, email, orderid FROM "+ Table_Name;

        Cursor cursor = db.query(Table_Name, new String[]{COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8, COL_9}, COL_1+ "=?",new String[]{String.valueOf(userid)},null, null, null, null);
        if (cursor.moveToNext()){
            HashMap<String,String> user = new HashMap<>();
            user.put("item",cursor.getString(cursor.getColumnIndex(COL_2)));
            user.put("price",cursor.getString(cursor.getColumnIndex(COL_3)));
            user.put("quantity",cursor.getString(cursor.getColumnIndex(COL_4)));
            user.put("name",cursor.getString(cursor.getColumnIndex(COL_5)));
            user.put("address",cursor.getString(cursor.getColumnIndex(COL_6)));
            user.put("email",cursor.getString(cursor.getColumnIndex(COL_7)));
            user.put("orderid",cursor.getString(cursor.getColumnIndex(COL_8)));
            user.put("time",cursor.getString(cursor.getColumnIndex(COL_9)));
            userList.add(user);
        }
        return  userList;
    }

并且它不是空指针异常,因为我在Listview中检索数据时没有收到任何错误

或者任何其他如何使用其id检索行的方法

任何帮助和解决方案表示赞赏

提前致谢

答案

试试这个

SQLiteAdaptor db = new SQLiteAdaptor(view.getContext());

以上是关于java.lang.NullPointerException错误是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

亲測,Eclipse报&quot;An error has occurred,See error log for more details. java.lang.NullPointerExce

来自 LayerDrawable 的异常

Microsoft Access 和 Java JDBC-ODBC 错误

如何使用其id获取单个SQLite行数据?