android.util.Log.println_native中的java.lang.NullPointerException

android.util.Log.println_native中的java.lang.NullPointerException,java,android,sqlite,Java,Android,Sqlite,好的,请帮助我,我尝试了所有我在网上找到的东西,但仍然得到这个错误。我已经在assets文件夹中导入了预填充的只读sqlite数据库,该数据库有100行,包含列_ID、问题、答案、选项1、选项2、选项3。我在这个数据库中有3个具有相同结构的表。我从数据库中随机抽取问题,如果用户回答正确,我会再问他两个额外的问题,不是随机的,但问题的ID与第一个问题相同,而是来自表2。例如:我要求用4个可能的答案猜国旗,如果答案是正确的,我就用这个问题ID,从城市表中问他“什么是……的首都”,如果答案是正确的,我

好的,请帮助我,我尝试了所有我在网上找到的东西,但仍然得到这个错误。我已经在assets文件夹中导入了预填充的只读sqlite数据库,该数据库有100行,包含列_ID、问题、答案、选项1、选项2、选项3。我在这个数据库中有3个具有相同结构的表。我从数据库中随机抽取问题,如果用户回答正确,我会再问他两个额外的问题,不是随机的,但问题的ID与第一个问题相同,而是来自表2。例如:我要求用4个可能的答案猜国旗,如果答案是正确的,我就用这个问题ID,从城市表中问他“什么是……的首都”,如果答案是正确的,我从货币表中问他“什么是……使用的货币”。使用相同的ID。所以,这里是崩溃报告:

java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:293)
at rs.androidaplikacije.zastaveigradovi.Kviz20Hard.nextQuestionGrad(Kviz20Hard.java:378)
at rs.androidaplikacije.zastaveigradovi.Kviz20Hard.access$1(Kviz20Hard.java:321)
at rs.androidaplikacije.zastaveigradovi.Kviz20Hard$2.run(Kviz20Hard.java:69)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3744)
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:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
这是game类,它的一部分,我得到错误的方法:

private void nextQuestionCities() {

         flag.setVisibility(View.GONE);
         dodatnoPitanje.setVisibility(View.VISIBLE);

         TestAdapter mDbHelper = new TestAdapter(this);
            DataBaseHelper myDbHelper = new DataBaseHelper(this);

            if(!myDbHelper.checkDataBase()){
            mDbHelper.createDatabase();
            }

            try{  

                mDbHelper.open(); 

                Cursor c = mDbHelper.getTestDataGradovi(mCurrentID);
                if (c != null) {
                       if (c.moveToFirst()) {

                List<Answer> labels = new ArrayList<Answer>();



                labels.add(new Answer(c.getString(2), true));
                labels.add(new Answer(c.getString(3), false));
                labels.add(new Answer(c.getString(4), false));
                labels.add(new Answer(c.getString(5), false));

                tacanOdg = c.getString(2);

                Collections.shuffle(labels);

                dodatnoPitanje.setText(c.getString(1));

                bOdgovor1.setText(labels.get(0).option);
                bOdgovor1.setTag(labels.get(0));
                bOdgovor1.setOnClickListener(clickListenerGrad);

                bOdgovor2.setText(labels.get(1).option);
                bOdgovor2.setTag(labels.get(1));
                bOdgovor2.setOnClickListener(clickListenerGrad);

                bOdgovor3.setText(labels.get(2).option);
                bOdgovor3.setTag(labels.get(2));
                bOdgovor3.setOnClickListener(clickListenerGrad);

                bOdgovor4.setText(labels.get(3).option);
                bOdgovor4.setTag(labels.get(3));
                bOdgovor4.setOnClickListener(clickListenerGrad);

                score.setText("Score: " + brojacTacnihOdgovora);

                       }
                       else {
                           Log.e("empty cursor", null);
                       }
                    }
                    else {
                        Log.e("null cursor", null);
                    }

            }
            finally{   
                mDbHelper.close();
            }
     }
下面是我的适配器类:

public class TestAdapter 
{
    protected static final String TAG = "DataAdapter";

    private final Context mContext;
    private SQLiteDatabase mDb;
    private DataBaseHelper mDbHelper;

    public TestAdapter(Context context) 
    {
        this.mContext = context;
        mDbHelper = new DataBaseHelper(mContext);
    }

    public TestAdapter createDatabase() throws SQLException 
    {
        try 
        {
            mDbHelper.createDataBase();
        } 
        catch (IOException mIOException) 
        {
            Log.e(TAG, mIOException.toString() + "  UnableToCreateDatabase");
            throw new Error("UnableToCreateDatabase");
        }
        return this;
    }

    public TestAdapter open() throws SQLException 
    {
        try 
        {
            mDbHelper.openDataBase();
            mDbHelper.close();
            mDb = mDbHelper.getReadableDatabase();
        } 
        catch (SQLException mSQLException) 
        {
            Log.e(TAG, "open >>"+ mSQLException.toString());
            throw mSQLException;
        }
        return this;
    }

    public void close() 
    {
        mDbHelper.close();
    }

     public Cursor getTestData(String whereClause){
             String sql ="SELECT * FROM tblPitanja WHERE 1 = 1 " + whereClause + " ORDER BY RANDOM() LIMIT 1";
             return mDb.rawQuery(sql, null);
         }

     public Cursor getTestDataGradovi(long id){
            String sql ="SELECT * FROM tblGradovi WHERE _ID = " + id;
            return  mDb.rawQuery(sql, null);
        }

     public Cursor getTestDataValute(long id){
             String sql ="SELECT * FROM tblValute WHERE _ID = " + id;
             return mDb.rawQuery(sql, null);
         }

}

为此调用Log.e时进行更改:

Log.e("empty cursor", "");
Log.e("null cursor", "");

问题似乎是,您向该方法发送null,而他不接受null…

为此调用Log.e时进行更改:

Log.e("empty cursor", "");
Log.e("null cursor", "");

问题似乎是您向该方法发送null,而他不接受null…

我建议使用有意义的日志消息。这是真的。。。但至少修改代码,他以后可以考虑;)好的,我马上就去。但我还是会撞车,对吗?如何预防?我的代码有问题吗?谢谢你,伙计。你继续犯同样的错误还是错误被改变了?@marjanbaz它应该停止崩溃了。这里的问题是各种日志记录方法需要字符串而不是
null
。相反,您将看到的只是一些不太有用的消息-它们只包含标记和时间以外的任何信息。我建议您记录有意义的消息。这是真的。。。但至少修改代码,他以后可以考虑;)好的,我马上就去。但我还是会撞车,对吗?如何预防?我的代码有问题吗?谢谢你,伙计。你继续犯同样的错误还是错误被改变了?@marjanbaz它应该停止崩溃了。这里的问题是各种日志记录方法需要字符串而不是
null
。相反,您将看到的只是不太有用的消息——它们只包含标记和时间以外的任何信息。