Android空指针异常不知道如何解决 [英] Android Null Pointer Exception Not sure How to fix it

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

问题描述

我在我的代码中的一行中不断收到空指针异常的错误,我不知道如何修复它.它基本上只是另一种方法的副本,所以我不知道为什么它会给我错误.任何帮助将不胜感激:

I keep getting an error for a Null Pointer Exception on a line in my code and i'm not sure how to fix it. It's basically just a copy of another method so I don't know why it's giving me the error. Any help would be appreciated:

import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;

public class CurrentLesson extends Activity {

TabHost th;
TabSpec specs;
TimingsDb tDb = new TimingsDb(this);

Calendar c;
String lesson;
String week;
String day;

TextView tvTab1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.current_lesson_tabs);
    c = Calendar.getInstance();
    tvTab1 = (TextView) findViewById(R.id.textViewCLW1tv1);
    setupTabs();

    int h = c.get(Calendar.HOUR_OF_DAY);
    int m = c.get(Calendar.MINUTE);
    int w = c.get(Calendar.DAY_OF_WEEK);

    if ((h == 9) && (m <= 50)) {
        lesson = "1";
    } else if (((h == 9)&&((m > 50)&&(m <=59))) || ((h == 10)&&(m<=40))) {
        lesson = "2";
    } else if ((h == 11)&&(m<=50)) {
        lesson = "3";
    } else if (((h == 12)&&((m > 50)&&(m <=59))) || ((h == 13)&&(m<=40))) {
        lesson = "4";
    } else if (((h == 13)&&((m > 40)&&(m <=59))) || ((h == 14)&&(m<=30))) {
        lesson = "5";
    } else if (((h == 14)&&((m > 30)&&(m <=59))) || ((h == 15)&&(m<=20))) {
        lesson = "6";
    } else {
        lesson = "0";
    }

    switch(w){

    case 2:
        day = "Monday";
        break;
    case 3:
        day = "Tuesday";
        break;
    case 4:
        day = "Wednesday";
        break;
    case 5:
        day = "Thursday";
        break;
    case 6:
        day = "Friday";
        break;
    default:
        day = "";
    }//end switch

    week = "1";

    String temp;
    temp = tDb.getCurrent(day,week,lesson); //THIS IS WHERE I GET THE EXCEPTION

    if(!(temp == null)){
        tvTab1.setText(temp);
    }
}// end onCreate

public void setupTabs() {
    th = (TabHost) findViewById(R.id.tabhost2);
    th.setup();
    specs = th.newTabSpec("tag1");
    specs.setContent(R.id.tabCLWeek1);
    specs.setIndicator("Week One");
    th.addTab(specs);
    specs = th.newTabSpec("tag2");
    specs.setContent(R.id.tabCLWeek2);
    specs.setIndicator("Week Two");
    th.addTab(specs);
}

}// endClass

我认为这是导致错误的 getCurrent() 方法:

This was the getCurrent() Method where the error is being caused I think:

public String getCurrent(String day, String week, String lesson) {
    // TODO Auto-generated method stub

    String[] column = new String[] { KEY_SUBJECT };
    String selection = KEY_DAY + " = ? AND " + KEY_WEEK + " = ? AND "
            + KEY_LESSON + " = ?";
    String[] selectionArgs = new String[] { day, week, lesson };
    Cursor c = ourDatabase.query(DATABASE_TABLE, column, selection,
            selectionArgs, null, null, null);
    ;
    String result = "";
    if (c.moveToFirst()) {
        int iSubject = c.getColumnIndex(KEY_SUBJECT);
        result = c.getString(iSubject);
    }
    c.close();
    if (result == null) {
        result = "";
    }
    return result;

}

这是 logcat:

03-18 09:46:06.259: E/AndroidRuntime(20000): FATAL EXCEPTION: main
03-18 09:46:06.259: E/AndroidRuntime(20000): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shearer.schooltimetable/com.shearer.schooltimetable.CurrentLesson}: java.lang.NullPointerException
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2255)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread.access$600(ActivityThread.java:146)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.os.Looper.loop(Looper.java:137)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread.main(ActivityThread.java:5171)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at java.lang.reflect.Method.invokeNative(Native Method)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at java.lang.reflect.Method.invoke(Method.java:511)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at dalvik.system.NativeStart.main(Native Method)
03-18 09:46:06.259: E/AndroidRuntime(20000): Caused by: java.lang.NullPointerException
03-18 09:46:06.259: E/AndroidRuntime(20000):    at com.shearer.schooltimetable.TimingsDb.getCurrent(TimingsDb.java:132)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at com.shearer.schooltimetable.CurrentLesson.onCreate(CurrentLesson.java:77)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.Activity.performCreate(Activity.java:5200)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-18 09:46:06.259: E/AndroidRuntime(20000):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
03-18 09:46:06.259: E/AndroidRuntime(20000):    ... 11 more

推荐答案

ourDatabase 似乎是 null.请确保您正确初始化它.或者您可以尝试替换它(假设 TimingsDb 是 open helper 的包装器):

It seems that ourDatabase is null. Please make sure you init it correctly. Or you may try to replace this (assuming TimingsDb is a wrapper for open helper):

Cursor c = ourDatabase.query(DATABASE_TABLE, column, selection,
        selectionArgs, null, null, null);

这样:

Cursor c = this.getWritableDatabase().query(DATABASE_TABLE, column, selection,
        selectionArgs, null, null, null);

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

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