空指针异常 Android [英] NullPointerException Android

查看:134
本文介绍了空指针异常 Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到 NullPointerException 并且我无法修复它.任何人都可以看看我的代码,看看问题是什么以及如何解决它.提前致谢.

I am getting NullPointerException and I couldn't fix it. Could anyone please have a look at my code to see what the problem is and how to fix it. Thanks in advance.

DatabeseDEO.class

DatabeseDEO.class

            public class DatabaseDEO  {
    private DatabaseHelper DbHelper;
     public DatabaseDEO(Context context) {
            DbHelper = new DatabaseHelper(context);
        }

        public DatabaseDEO() {

        }

        public ArrayList<String> getToSpinner() {
            ArrayList<String> list=new ArrayList<String>();
            SQLiteDatabase db = DbHelper.getReadableDatabase();
            db.beginTransaction();
            try
            {

                String selectQuery = "SELECT code FROM "+ Currency.NAME_TABLE;
                Cursor cursor = db.rawQuery(selectQuery, null);
                if(cursor.getCount() >0)

                {
                    while (cursor.moveToNext()) {

                        String currency= cursor.getString(cursor.getColumnIndex("code"));
                        list.add(currency);

                    }


                }
                db.setTransactionSuccessful();

            }
            catch (SQLiteException e)
            {
                e.printStackTrace();

            }
            finally
            {
                db.endTransaction();

            }

            return list;
        }
    }

AddWallet.class

AddWallet.class

public class AddWallet extends AppCompatActivity {
Spinner currency;
DatabaseDEO db = new DatabaseDEO();
        ArrayList<String> list= db.getToSpinner();
        ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,R.layout.currency_spinner, R.id.text,list);
        currency.setAdapter(adapter);
    }

}

currency_spinner.xml

currency_spinner.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5sp"
        android:paddingBottom="10sp"
        android:paddingTop="10sp"

        >

    </TextView>


</RelativeLayout>

错误

              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.martin.xxx/com.example.martin.xxx.AddWallet}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase Database.DatabaseHelper.getReadableDatabase()' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase Database.DatabaseHelper.getReadableDatabase()' on a null object reference
                  at Database.DatabaseDEO.getToSpinner(DatabaseDEO.java:32)
                  at com.example.martin.xxx.AddWallet.onCreate(AddWallet.java:41)
                  at android.app.Activity.performCreate(Activity.java:6664)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:154) 
                  at android.app.ActivityThread.main(ActivityThread.java:6077) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

推荐答案

首先按照命名约定将 DbHelper 重命名为 dbHelper

First of all as naming convention rename the DbHelper to dbHelper

解决办法:你必须构造函数

Solution: you have to constructors

    public DatabaseDEO(Context context) {
        DbHelper = new DatabaseHelper(context);
    }

    public DatabaseDEO() {

    }

第一个初始化databaseHelper,第二个不初始化.

first one you initialize the databaseHelper and the second one you don't initialize it.

AddWallet 中,您调用空的 Constructor,因此 DatabaseHelper 未初始化,您必须调用第二个构造函数并删除空的构造函数以不要再错误地调用它.

In AddWallet you call the empty Constructor so the DatabaseHelper is not initialized you have to call the second constructor and delete the empty one to not wrongly call it again.

这篇关于空指针异常 Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆