无法启动的活动ComponentInfo当新的活动被称为:NullPointerException异常 [英] Unable to start activity ComponentInfo when new activity is called: NullPointerException

查看:211
本文介绍了无法启动的活动ComponentInfo当新的活动被称为:NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到此错误,当我通过故意调用一个新的活动,并通过意向发送值 在这里,我给了类调用NW类及codeS分别请检查日志猫太我得到强制关闭我使用的Andr​​oid版本4.0.3

活动调用另一个活动时,btnf被称为

 包dlp.android.digichronicle;

进口java.io.IOException异常;
进口的java.util.ArrayList;
进口android.app.Activity;
进口android.content.Intent;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteException;
进口android.os.Bundle;
进口android.text.method.ScrollingMovementMethod;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;
进口android.widget.Toast;

公共类显示终端延伸活动实现View.OnClickListener {
    按钮btnf; //做起来难
    TextView的TVF; // OK
    EditText上EDTF,edt2; //数据库TXT

    / **第一次创建活动时调用。 * /

    DBHandandler myDbHelper =新DBHandandler(本);
    SQLiteDatabase MyDatabase的;
    字符串stattionlist,S1;

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.displ);
        TVF =(TextView中)findViewById(R.id.tvf);
        EDTF =(EditText上)findViewById(R.id.edtf);
        edt2 =(EditText上)findViewById(R.id.edt2);
        btnf =(按钮)findViewById(R.id.btnf);
        btnf.setOnClickListener(本);
        第一();
    }

    私人无效第一(){
        字符串S1 =,S2 = second.ge;
        this.myDbHelper =新DBHandandler(本);
        尝试 {
            FetchingData();
        }赶上(的SQLException E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }
        myDbHelper.openDataBase();
        MyDatabase的= myDbHelper.getWritableDatabase();
        的System.out.println(执行);
        MyDatabase的= myDbHelper.getReadableDatabase();
        的System.out.println(sure2); //调试信息
        //调用open()函数,它会显示在表中的EditText文本
        //使用setText方法
        //函数在DBHanadanler.java文件中定义
        如果(s2.equalsIgnoreCase(备忘录)){
            S1 = myDbHelper.open(备忘录,MyDatabase的);
            的System.out.println(叫备忘录+ S1 + S2);
        }
        否则,如果(s2.equalsIgnoreCase(提示))
            S1 = myDbHelper.open(提醒,MyDatabase的);
        否则,如果(s2.equalsIgnoreCase(任务))
            S1 = myDbHelper.open(任务,MyDatabase的);
        否则,如果(s2.equalsIgnoreCase(事件))
            S1 = myDbHelper.open(事件,MyDatabase的);
        否则,如果(s2.equalsIgnoreCase(账户))
            S1 = myDbHelper.open(户口,MyDatabase的);
        的System.out.println(后开式);

        edtf.setText(S1);
        的System.out.println(字符串是:+ S1 +第二次); //调试信息
        edtf.setMovementMethod(新ScrollingMovementMethod());
        tvf.setText(S2);
    }

    //调用的是present在datbase的方法
    私人无效FetchingData()抛出的SQLException {

        尝试 {
            myDbHelper.onCreateDataBase();

        }赶上(IOException异常IOE){

            抛出新的错误(无法创建数据库);

        }
    }

    @覆盖
    公共无效的onClick(视图v){
        // TODO自动生成方法存根
        如果(V == btnf)
        {
            S1 = edtf.getText()的toString();

            意图I3 =新的意图(displ.this,inter.class);
            i3.putExtra(价值,S1);
            startActivity(I3);

        }

    }
}
 

新叫做活动类

 包dlp.android.digichronicle;

进口java.io.IOException异常;

进口android.app.Activity;
进口android.content.Intent;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.os.Bundle;
进口android.util.Log;
进口android.widget.Toast;

公共类间扩展活动{
    DBHandandler myDbHelper;
    SQLiteDatabase MyDatabase的;
    字符串s;
    字符串stattionlist,数据库名=部件;

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        叠B = getIntent()getExtras()。
        的System.out.println(B);
        如果(B!= NULL)
        {
            S = b.getString(价值);
            的System.out.println(中间+ S);
            Log.e(XXXX2,多个);
            尝试 {
                FetchingData();
                myDbHelper.openDataBase();
                的System.out.println(******打开的DB后);
                MyDatabase的= myDbHelper.getWritableDatabase();
                的System.out.println(之后######可写);

                的System.out.println(######更新后的字符串:+ S);
                字符串s2 = second.ge;

                如果(s2.equalsIgnoreCase(备忘录)){
                    myDbHelper.updateevent(备忘录,MyDatabase的,S);
                    的System.out.println(叫备忘录+ S2 + S);
                }
                否则,如果(s2.equalsIgnoreCase(提示))
                    myDbHelper.updateevent(提醒,MyDatabase的,S);
                否则,如果(s2.equalsIgnoreCase(任务))
                    myDbHelper.updateevent(任务,MyDatabase的,S);
                否则,如果(s2.equalsIgnoreCase(事件))
                    myDbHelper.updateevent(事件,MyDatabase的,S);
                否则,如果(s2.equalsIgnoreCase(账户))
                    myDbHelper.updateevent(户口,MyDatabase的,S);
                Toast.makeText(getApplicationContext(),更新,Toast.LENGTH_LONG).show();
            }赶上(的SQLException E){
                // TODO自动生成的catch块
                e.printStackTrace();
            }
            myDbHelper.close();
            Mydatabase.close();
            意图I3 =新的意图(inter.this,second.class);
            startActivity(I3);
            的System.out.println(按钮结束btnf);
        }
        // stattionlist = this.myDbHelper.updateevent(MyDatabase的,S1);
        // Toast.makeText(getApplicationContext(),+ s1,100).show();

    }

    私人无效FetchingData(){
        // TODO自动生成方法存根
        尝试 {
            myDbHelper.onCreateDataBase();
        }赶上(IOException异常IOE){
            抛出新的错误(无法创建数据库);
        }
        尝试 {
            myDbHelper.openDataBase();
            MyDatabase的= myDbHelper.getWritableDatabase();
            的System.out.println(执行);
        }赶上(的SQLException SQLE){
            扔SQLE;
        }
    }

    //意图I2 =新的意图(intermediate.this,second.class);
    // startActivity(I 2);
}
 

数据库辅助类

 包dlp.android.digichronicle; // UR包名

进口java.io.FileOutputStream中;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口java.io.OutputStream中;
进口的java.util.ArrayList;

进口android.content.ContentValues​​;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteException;
进口android.database.sqlite.SQLiteOpenHelper;
进口android.widget.Toast;

公共类DBHandandler扩展SQLiteOpenHelper {
    私有静态字符串DB_PATH =/data/data/dlp.android.digichronicle/databases/;
    私有静态字符串DB_NAME =widget.sqlite;
    私有静态字符串TABLENAME =部件;
    私人SQLiteDatabase MyDatabase的;
    私人最终语境myContext;
    公共静态最后弦乐KEY_MEM =备忘录;
    公共静态最后弦乐KEY_TAS =任务;
    公共静态最后弦乐KEY_REM =提醒;
    公共静态最后弦乐KEY_EVE =事件;
    公共静态最后弦乐KEY_DAT =过时;
    公共静态最后弦乐KEY_INC =收入;
    公共静态最后弦乐KEY_EXP =EXP;
    ArrayList的<字符串> SW;
    字符串s =;

    公共DBHandandler(上下文的背景下){
        超级(上下文,DB_NAME,空,1);
        // TODO自动生成构造函数存根
        this.myContext =背景;
    }

    公众诠释onCreateDataBase()抛出IOException异常
    {
        布尔dbExist = checkDatabase();
        如果(dbExist){
            返回0;
        }
        其他 {
            的System.out.println(onCreateDataBase方法开始执行);
            this.getReadableDatabase();
            copyDataBase();
            返回1;

        }
    }

    私人布尔checkDatabase(){
        // TODO自动生成方法存根
        SQLiteDatabase CHECKDB = NULL;
        尝试
        {
            字符串mypath中= DB_PATH + DB_NAME;
            CHECKDB = SQLiteDatabase.openDatabase(mypath中,空,SQLiteDatabase.OPEN_READWRITE);
        }赶上(例外五){
            // TODO:处理异常
        }
        如果(CHECKDB!= NULL){
            checkDB.close();
        }
        返回CHECKDB!= NULL?真假;

    }

    私人无效copyDataBase()抛出IOException异常{

        InputStream的myInput = myContext.getAssets()开(DB_NAME)。

        //路径刚刚创建的空分贝
        字符串outFileName = DB_PATH + DB_NAME;

        //打开空分贝的输出流
        的OutputStream myOutput =新的FileOutputStream(outFileName);

        //传输的字节从inputfile中的OUTPUTFILE
        byte []的缓冲区=新的字节[1024];
        INT长;
        而((长度= myInput.read(缓冲液))大于0){
            myOutput.write(缓冲液,0,长度);

        }

        //关闭流
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
        // TODO自动生成方法存根

    }

    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        // TODO自动生成方法存根

    }

    公共无效的openDatabase()抛出的SQLException {

        //打开数据库
        字符串mypath中= DB_PATH + DB_NAME;
        MyDatabase的= SQLiteDatabase.openDatabase(mypath中,空,SQLiteDatabase.OPEN_READONLY);

    }

    公共串开路(字符串S3,SQLiteDatabase MyDatabase的)
    {
        ArrayList的<字符串>名单=新的ArrayList<字符串>();
        的System.out.println(B4字符串是:+清单);
        字符串s =;
        尝试 {
            的System.out.println(字符串得到的是+ S3);
            字符串DT = MainActivity.g;
            的System.out.println(取得日期为+ DT);
            光标C = Mydatabase.rawQuery(选择++ S3 +
                    +的小工具,其中日期='+ DT +',NULL);
            的System.out.println(之后光标);
            如果(c.moveToFirst())
            {

                的System.out.println(光标+ c.moveToFirst());
                做 {
                    的System.out.println(之前参数:columnIndex);
                    list.add(c.getString(c.getColumnIndex(S3)));
                    的System.out.println(之后参数:columnIndex);
                    的System.out.println(字符串是:+清单);

                }而(c.moveToNext());
            }
            c.close();
        }赶上(SQLiteException SE){
            Mydatabase.close();
            的System.out.println(异常);
        }

        S = list.toString();
        INT的len = s.length();
        S = s.substring(1,LEN  -  1);
        的System.out.println(字符串是:+清单);
        的System.out.println(字符串是:+ S);
        返回S;

    }

    公共字符串eventdia(SQLiteDatabase mydatabase1){

        ArrayList的<字符串>名单=新的ArrayList<字符串>();
        的System.out.println(事件对话的开始+清单);
        字符串s =;
        尝试 {
            的System.out.println(歌厅事件);
            字符串DT = MainActivity.g;
            的System.out.println(获得活动日期+ DT);
            光标C = mydatabase1.rawQuery(选择小部件的事件,其中日期='+ DT +',
                    空值);

            如果(c.moveToFirst())
            {
                的System.out.println(光标+ c.moveToFirst());
                做 {
                    list.add(c.getString(c.getColumnIndex(事件)));
                    的System.out.println(字符串是:+清单);

                }而(c.moveToNext());
            }
            c.close();
        }赶上(SQLiteException SE){
            mydatabase1.close();
            的System.out.println(异常);
        }

        S = list.toString();
        INT的len = s.length();
        S = s.substring(1,LEN  -  1);
        的System.out.println(字符串是:+清单);
        的System.out.println(字符串是:+ S);
        返回S;
    }

    公共字符串签(SQLiteDatabase mydatabase1){

        ArrayList的<字符串>名单=新的ArrayList<字符串>();
        的System.out.println(B4字符串是:+清单);
        字符串s =;
        尝试 {
            的System.out.println(歌厅事件);
            字符串DT = MainActivity.g;
            的System.out.println(取得日期为+ DT);
            光标C = mydatabase1.rawQuery(选择小部件的事件,其中日期='+ DT +',
                    空值);

            如果(c.moveToFirst())
            {
                的System.out.println(光标+ c.moveToFirst());
                做 {
                    list.add(c.getString(c.getColumnIndex(事件)));
                    的System.out.println(字符串是:+清单);

                }而(c.moveToNext());
            }
            c.close();
        }赶上(SQLiteException SE){
            mydatabase1.close();
            的System.out.println(异常);
        }

        S = list.toString();
        INT的len = s.length();
        S = s.substring(1,LEN  -  1);
        的System.out.println(字符串是:+清单);
        的System.out.println(字符串是:+ S);
        返回S;
    }

    公共无效updateevent(字符串GE,SQLiteDatabase mydatabase2,串S1){
        // TODO自动生成方法存根
        字符串DT = MainActivity.g;
        的System.out.println(前######查询);
        ContentValues​​ cvupdate =新ContentValues​​();
        cvupdate.put(GE,S1);

        mydatabase2.update(TABLENAME,cvupdate,KEY_DAT +=+ DT,NULL);

        // mydatabase2.rawQuery(更新小工具设置备忘录=++ S1 ++在哪里过时='+ DT +',NULL);
        // mydatabase2.rawQuery(更新小工具设置++ GE +=+ S1 ++哪里哪里约会='+ DT +',NULL);
        的System.out.println(后######查询);
    }

    //函数中插入新记录
    公共无效INSERTINTO(SQLiteDatabase mydatabase2,字符串日期,字符串备忘录,字符串的任务,
            字符串的提醒,浮动收入,字符串的事件,浮动EXP)
    {
        ContentValues​​数据= createContentValues​​(日期,备忘录,任务,提醒,收入,事件,EXP);
        的System.out.println(数据+数据+是);
        mydatabase2.insert(TABLENAME,空,数据);
        的System.out.println(记录完成);
    }

    //返回该数据库的内容
    私人ContentValues​​ createContentValues​​(字符串日期,字符串备忘录,字符串的任务,
            字符串的提醒,浮动收入,字符串的事件,浮动EXP)
    {
        ContentValues​​值=新ContentValues​​();
        values​​.put(KEY_DAT,日期);
        values​​.put(KEY_MEM,备忘录);
        values​​.put(KEY_TAS,任务);
        values​​.put(KEY_REM,提醒);
        values​​.put(KEY_INC,收入);
        values​​.put(KEY_EVE,事件);
        values​​.put(KEY_EXP,EXP);
        返回值;
    }

    //这里写乌尔retreival方法
}
 

登录猫错误

  D / AndroidRuntime(553):关闭虚拟机
W / dalvikvm(553):主题ID = 1:螺纹退出与未捕获的异常(组= 0x409c01f8)
E / AndroidRuntime(553):致命异常:主要
E / AndroidRuntime(553):java.lang.RuntimeException的:无法启动的活动ComponentInfo {dlp.android.digichronicle / dlp.android.digichronicle.inter}:显示java.lang.NullPointerException
E / AndroidRuntime(553):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
E / AndroidRuntime(553):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
E / AndroidRuntime(553):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
E / AndroidRuntime(553):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
E / AndroidRuntime(553):在android.os.Handler.dispatchMessage(Handler.java:99)
E / AndroidRuntime(553):在android.os.Looper.loop(Looper.java:137)
E / AndroidRuntime(553):在android.app.ActivityThread.main(ActivityThread.java:4424)
E / AndroidRuntime(553):在java.lang.reflect.Method.invokeNative(本机方法)
E / AndroidRuntime(553):在java.lang.reflect.Method.invoke(Method.java:511)
E / AndroidRuntime(553):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
E / AndroidRuntime(553):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E / AndroidRuntime(553):在dalvik.system.NativeStart.main(本机方法)
E / AndroidRuntime(553):由:显示java.lang.NullPointerException
E / AndroidRuntime(553):在dlp.android.digichronicle.inter.FetchingData(inter.java:84)
E / AndroidRuntime(553):在dlp.android.digichronicle.inter.onCreate(inter.java:28)
E / AndroidRuntime(553):在android.app.Activity.performCreate(Activity.java:4465)
E / AndroidRuntime(553):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E / AndroidRuntime(553):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
E / AndroidRuntime(553):11 ...更多
I / dalvikvm(553):主题ID = 3:反应信号3
I / dalvikvm(553):写的堆栈跟踪到/data/anr/traces.txt
I / dalvikvm(553):主题ID = 3:反应信号3
I / dalvikvm(553):写的堆栈跟踪到/data/anr/traces.txt
I / dalvikvm(553):主题ID = 3:反应信号3
I / dalvikvm(553):写的堆栈跟踪到/data/anr/traces.txt
 

解决方案

您需要实例 myDbHelper 活动的的onCreate()(你们这样做是在显示终端的活动,但不是在活动):

  DBHandandler myDbHelper =新DBHandandler(本);
 

因为 FetchingData() @ 28行调用 myDbHelper.onCreateDataBase(); ,而现在还没有实例化。

I am getting this error when i call a new activity via intent and sending values via intent here i gave the class calling nw class and their codes separately please check the log cat too i am getting force close i am using android version 4.0.3

Activity calling another activity when btnf is called

package dlp.android.digichronicle;

import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class displ extends Activity implements View.OnClickListener {
    Button btnf;// done
    TextView tvf;// ok
    EditText edtf, edt2;// db txt

    /** Called when the activity is first created. */

    DBHandandler myDbHelper = new DBHandandler(this);
    SQLiteDatabase Mydatabase;
    String stattionlist, s1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.displ);
        tvf = (TextView) findViewById(R.id.tvf);
        edtf = (EditText) findViewById(R.id.edtf);
        edt2 = (EditText) findViewById(R.id.edt2);
        btnf = (Button) findViewById(R.id.btnf);
        btnf.setOnClickListener(this);
        first();
    }

    private void first() {
        String s1 = "", s2 = second.ge;
        this.myDbHelper = new DBHandandler(this);
        try {
            FetchingData();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        myDbHelper.openDataBase();
        Mydatabase = myDbHelper.getWritableDatabase();
        System.out.println("executed");
        Mydatabase = myDbHelper.getReadableDatabase();
        System.out.println("sure2");// debug info
        // calling open() function which will show the text in table in EditText
        // using SetText method
        // Function is defined in DBHanadanler.java file
        if (s2.equalsIgnoreCase("memo")) {
            s1 = myDbHelper.open("memo", Mydatabase);
            System.out.println("Called memo" + s1 + s2);
        }
        else if (s2.equalsIgnoreCase("reminder"))
            s1 = myDbHelper.open("reminder", Mydatabase);
        else if (s2.equalsIgnoreCase("tasks"))
            s1 = myDbHelper.open("tasks", Mydatabase);
        else if (s2.equalsIgnoreCase("events"))
            s1 = myDbHelper.open("events", Mydatabase);
        else if (s2.equalsIgnoreCase("accounts"))
            s1 = myDbHelper.open("accounts", Mydatabase);
        System.out.println("after open");

        edtf.setText(s1);
        System.out.println("string is : " + s1 + "2nd time");// debug info
        edtf.setMovementMethod(new ScrollingMovementMethod());
        tvf.setText(s2);
    }

    // call the method which is present in datbase
    private void FetchingData() throws SQLException {

        try {
            myDbHelper.onCreateDataBase();

        } catch (IOException ioe) {

            throw new Error("Unable to create database");

        }
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v == btnf)
        {
            s1 = edtf.getText().toString();

            Intent i3 = new Intent(displ.this, inter.class);
            i3.putExtra("value", s1);
            startActivity(i3);

        }

    }
}

Newly called activity class

package dlp.android.digichronicle;

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class inter extends Activity {
    DBHandandler myDbHelper;
    SQLiteDatabase Mydatabase;
    String s;
    String stattionlist, DBname = "widgets";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle b = getIntent().getExtras();
        System.out.println(b);
        if (b != null)
        {
            s = b.getString("value");
            System.out.println("INtermediate" + s);
            Log.e("xxxx2", s);
            try {
                FetchingData();
                myDbHelper.openDataBase();
                System.out.println("****** After open db");
                Mydatabase = myDbHelper.getWritableDatabase();
                System.out.println("###### after writable");

                System.out.println("###### updated string :" + s);
                String s2 = second.ge;

                if (s2.equalsIgnoreCase("memo")) {
                    myDbHelper.updateevent("memo", Mydatabase, s);
                    System.out.println("Called memo" + s2 + s);
                }
                else if (s2.equalsIgnoreCase("reminder"))
                    myDbHelper.updateevent("reminder", Mydatabase, s);
                else if (s2.equalsIgnoreCase("tasks"))
                    myDbHelper.updateevent("tasks", Mydatabase, s);
                else if (s2.equalsIgnoreCase("events"))
                    myDbHelper.updateevent("events", Mydatabase, s);
                else if (s2.equalsIgnoreCase("accounts"))
                    myDbHelper.updateevent("accounts", Mydatabase, s);
                Toast.makeText(getApplicationContext(), "updated", Toast.LENGTH_LONG).show();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            myDbHelper.close();
            Mydatabase.close();
            Intent i3 = new Intent(inter.this, second.class);
            startActivity(i3);
            System.out.println("button end btnf");
        }
        // stattionlist=this.myDbHelper.updateevent(Mydatabase,s1);
        // Toast.makeText(getApplicationContext()," "+s1,100).show();

    }

    private void FetchingData() {
        // TODO Auto-generated method stub
        try {
            myDbHelper.onCreateDataBase();
        } catch (IOException ioe) {
            throw new Error("Unable to create database");
        }
        try {
            myDbHelper.openDataBase();
            Mydatabase = myDbHelper.getWritableDatabase();
            System.out.println("executed");
        } catch (SQLException sqle) {
            throw sqle;
        }
    }

    // Intent i2=new Intent(intermediate.this,second.class);
    // startActivity(i2);
}

Database Helper class

package dlp.android.digichronicle; // ur package name

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class DBHandandler extends SQLiteOpenHelper {
    private static String DB_PATH = "/data/data/dlp.android.digichronicle/databases/";
    private static String DB_NAME = "widget.sqlite";
    private static String TABLENAME = "widgets";
    private SQLiteDatabase myDataBase;
    private final Context myContext;
    public static final String KEY_MEM = "memo";
    public static final String KEY_TAS = "tasks";
    public static final String KEY_REM = "reminder";
    public static final String KEY_EVE = "events";
    public static final String KEY_DAT = "dated";
    public static final String KEY_INC = "income";
    public static final String KEY_EXP = "exp";
    ArrayList<String> sw;
    String s = "";

    public DBHandandler(Context context) {
        super(context, DB_NAME, null, 1);
        // TODO Auto-generated constructor stub
        this.myContext = context;
    }

    public int onCreateDataBase() throws IOException
    {
        boolean dbExist = checkDatabase();
        if (dbExist) {
            return 0;
        }
        else {
            System.out.println("onCreateDataBase method execution starts");
            this.getReadableDatabase();
            copyDataBase();
            return 1;

        }
    }

    private boolean checkDatabase() {
        // TODO Auto-generated method stub
        SQLiteDatabase checkDB = null;
        try
        {
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        } catch (Exception e) {
            // TODO: handle exception
        }
        if (checkDB != null) {
            checkDB.close();
        }
        return checkDB != null ? true : false;

    }

    private void copyDataBase() throws IOException {

        InputStream myInput = myContext.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);

        }

        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

    public void openDataBase() throws SQLException {

        // Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }

    public String open(String s3, SQLiteDatabase Mydatabase)
    {
        ArrayList<String> list = new ArrayList<String>();
        System.out.println("b4 string is : " + list);
        String s = "";
        try {
            System.out.println("string got is " + s3);
            String dt = MainActivity.g;
            System.out.println("Date obtained is " + dt);
            Cursor c = Mydatabase.rawQuery("select " + " " + s3 + " "
                    + "from widgets where dated='" + dt + "'", null);
            System.out.println("after cursor");
            if (c.moveToFirst())
            {

                System.out.println("cursor" + c.moveToFirst());
                do {
                    System.out.println("before columnindex");
                    list.add(c.getString(c.getColumnIndex(s3)));
                    System.out.println("after columnindex");
                    System.out.println(" string is :  " + list);

                } while (c.moveToNext());
            }
            c.close();
        } catch (SQLiteException se) {
            Mydatabase.close();
            System.out.println("exception");
        }

        s = list.toString();
        int len = s.length();
        s = s.substring(1, len - 1);
        System.out.println("string is : " + list);
        System.out.println("string is : " + s);
        return s;

    }

    public String eventdia(SQLiteDatabase mydatabase1) {

        ArrayList<String> list = new ArrayList<String>();
        System.out.println("Event dialogue start " + list);
        String s = "";
        try {
            System.out.println("geting event");
            String dt = MainActivity.g;
            System.out.println("Date obtained in events " + dt);
            Cursor c = mydatabase1.rawQuery("select events from widgets where dated='" + dt + "'",
                    null);

            if (c.moveToFirst())
            {
                System.out.println("cursor" + c.moveToFirst());
                do {
                    list.add(c.getString(c.getColumnIndex("events")));
                    System.out.println(" string is :  " + list);

                } while (c.moveToNext());
            }
            c.close();
        } catch (SQLiteException se) {
            mydatabase1.close();
            System.out.println("exception");
        }

        s = list.toString();
        int len = s.length();
        s = s.substring(1, len - 1);
        System.out.println("string is : " + list);
        System.out.println("string is : " + s);
        return s;
    }

    public String checkin(SQLiteDatabase mydatabase1) {

        ArrayList<String> list = new ArrayList<String>();
        System.out.println("b4 string is : " + list);
        String s = "";
        try {
            System.out.println("geting event");
            String dt = MainActivity.g;
            System.out.println("Date obtained is" + dt);
            Cursor c = mydatabase1.rawQuery("select events from widgets where dated='" + dt + "'",
                    null);

            if (c.moveToFirst())
            {
                System.out.println("cursor" + c.moveToFirst());
                do {
                    list.add(c.getString(c.getColumnIndex("events")));
                    System.out.println(" string is :  " + list);

                } while (c.moveToNext());
            }
            c.close();
        } catch (SQLiteException se) {
            mydatabase1.close();
            System.out.println("exception");
        }

        s = list.toString();
        int len = s.length();
        s = s.substring(1, len - 1);
        System.out.println("string is : " + list);
        System.out.println("string is : " + s);
        return s;
    }

    public void updateevent(String ge, SQLiteDatabase mydatabase2, String s1) {
        // TODO Auto-generated method stub
        String dt = MainActivity.g;
        System.out.println("###### before query");
        ContentValues cvupdate = new ContentValues();
        cvupdate.put(ge, s1);

        mydatabase2.update(TABLENAME, cvupdate, KEY_DAT + "=" + dt, null);

        // mydatabase2.rawQuery("update widgets set memo="+" "+s1+" "+" where dated='"+dt+"'",null);
        // mydatabase2.rawQuery("update widgets set "+" "+ge+" = "+s1+" "+"where where dated='"+dt+"'",null);
        System.out.println("###### after query");
    }

    // Function inserting new record
    public void Insertinto(SQLiteDatabase mydatabase2, String date, String memo, String tasks,
            String reminder, float income, String events, float exp)
    {
        ContentValues data = createContentValues(date, memo, tasks, reminder, income, events, exp);
        System.out.println("data " + data + "  is ");
        mydatabase2.insert(TABLENAME, null, data);
        System.out.println("record is done ");
    }

    // return a content of the database
    private ContentValues createContentValues(String date, String memo, String tasks,
            String reminder, float income, String events, float exp)
    {
        ContentValues values = new ContentValues();
        values.put(KEY_DAT, date);
        values.put(KEY_MEM, memo);
        values.put(KEY_TAS, tasks);
        values.put(KEY_REM, reminder);
        values.put(KEY_INC, income);
        values.put(KEY_EVE, events);
        values.put(KEY_EXP, exp);
        return values;
    }

    // write ur retreival methods here
}

Log cat errors

D/AndroidRuntime(553): Shutting down VM
W/dalvikvm(553): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
E/AndroidRuntime(553): FATAL EXCEPTION: main
E/AndroidRuntime(553): java.lang.RuntimeException: Unable to start activity ComponentInfo{dlp.android.digichronicle/dlp.android.digichronicle.inter}: java.lang.NullPointerException
E/AndroidRuntime(553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
E/AndroidRuntime(553):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
E/AndroidRuntime(553):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
E/AndroidRuntime(553):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
E/AndroidRuntime(553):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(553):  at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(553):  at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(553):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(553):  at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(553):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(553):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(553):  at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(553): Caused by: java.lang.NullPointerException
E/AndroidRuntime(553):  at dlp.android.digichronicle.inter.FetchingData(inter.java:84)
E/AndroidRuntime(553):  at dlp.android.digichronicle.inter.onCreate(inter.java:28)
E/AndroidRuntime(553):  at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(553):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime(553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
E/AndroidRuntime(553):    ... 11 more
I/dalvikvm(553): threadid=3: reacting to signal 3
I/dalvikvm(553): Wrote stack traces to '/data/anr/traces.txt'
I/dalvikvm(553): threadid=3: reacting to signal 3
I/dalvikvm(553): Wrote stack traces to '/data/anr/traces.txt'
I/dalvikvm(553): threadid=3: reacting to signal 3
I/dalvikvm(553): Wrote stack traces to '/data/anr/traces.txt'

解决方案

You need to instantiate myDbHelper in inter Activity's onCreate() (You did it in displ Activity but not in inter Activity):

DBHandandler myDbHelper = new DBHandandler(this);

since FetchingData() @ line 28 calls myDbHelper.onCreateDataBase(); while it is still not instantiated.

这篇关于无法启动的活动ComponentInfo当新的活动被称为:NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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