有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

传递长消息时出现java空指针异常

我初始化了DBAdapter对象,但在DBAdapter类的第166Cursor c = db.query(true,TABLE_NAME,null, where, null, null, null, null, null);行上仍然出现空指针异常

03-30 07:47:19.519: E/AndroidRuntime(4349): FATAL EXCEPTION: main
03-30 07:47:19.519: E/AndroidRuntime(4349): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.assignment1/com.example.assignment1.controller.TripDetailsActivity}: java.lang.NullPointerException
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread.access$600(ActivityThread.java:141)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.os.Handler.dispatchMessage(Handler.java:99)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.os.Looper.loop(Looper.java:137)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread.main(ActivityThread.java:5041)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at java.lang.reflect.Method.invokeNative(Native Method)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at java.lang.reflect.Method.invoke(Method.java:511)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at dalvik.system.NativeStart.main(Native Method)
03-30 07:47:19.519: E/AndroidRuntime(4349): Caused by: java.lang.NullPointerException
03-30 07:47:19.519: E/AndroidRuntime(4349):     at com.example.assignment1.controller.DBAdapter.getRow(DBAdapter.java:166)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at com.example.assignment1.controller.TripDetailsActivity.message(TripDetailsActivity.java:29)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at com.example.assignment1.controller.TripDetailsActivity.onCreate(TripDetailsActivity.java:25)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.Activity.performCreate(Activity.java:5104)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-30 07:47:19.519: E/AndroidRuntime(4349):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
03-30 07:47:19.519: E/AndroidRuntime(4349):     ... 11 more

三联活动。爪哇

package com.example.assignment1.controller;

import com.example.assignment1.R;

import 安卓.app.Activity;
import 安卓.database.Cursor;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.widget.TextView;

public class TripDetailsActivity extends Activity {
    public static final String LOG="log";
    TextView mess;
    DBAdapter db;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(LOG,"Trip Details..");
        db=new DBAdapter(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);
        mess=(TextView)findViewById(R.id.message);
        Bundle b=getIntent().getExtras();
        Log.i(LOG,"------------------"+b.getString("ID"));
        String s=b.getString("ID");
        message(s);
    }

    public void message(String idInDB){
        Cursor cursor=db.getRow(idInDB);
        String row = "";
        if(cursor!=null){
    if (cursor.moveToFirst()) {
        int idDB = cursor.getInt(0);
        String name = cursor.getString(1);
        String studentNum = cursor.getString(2);
        String favColour = cursor.getString(3);
        row = "ID: " + idDB + "\n" 
                + "Name: " + name + "\n"
                + "Std#: " + studentNum + "\n"
                + "FavColour: " + favColour;
        Log.i("LOG",row);
    }
    cursor.close();
    mess.setText(row);
    }
        else {
            mess.setText("Cursor is null");
    }

    }
}

DBAdapter。java--就是从TripDetaiActivity调用的方法。爪哇

public Cursor getRow(Long idInDB) {
        String where = TRIP_ID + "=" + idInDB;
    Cursor c = db.query(true, TABLE_NAME, null, where, null, null, null, null, null);
    if (c != null) {
    c.moveToFirst();
        }
    return c;
}

共 (0) 个答案