无法实例化活动组件信息{}:java.lang.NullPointerException

无法实例化活动组件信息{}:java.lang.NullPointerException,java,android,database,sqlite,Java,Android,Database,Sqlite,你好,我是android新手,所以你能帮我纠正我的错误吗。错误发生在 我要开始游戏了,这是我的日志,数据库和活动 Logcat 08-06 04:02:31.350:E/AndroidRuntime(8261):致命异常:主 08-06 04:02:31.350:E/AndroidRuntime(8261):java.lang.RuntimeException:无法实例化活动组件信息{com.example.windowcard/com.example.windowcard.Grade1}:ja

你好,我是android新手,所以你能帮我纠正我的错误吗。错误发生在 我要开始游戏了,这是我的日志,数据库和活动

Logcat

08-06 04:02:31.350:E/AndroidRuntime(8261):致命异常:主

08-06 04:02:31.350:E/AndroidRuntime(8261):java.lang.RuntimeException:无法实例化活动组件信息{com.example.windowcard/com.example.windowcard.Grade1}:java.lang.NullPointerException 08-06 04:02:31.350:E/AndroidRuntime(8261):位于android.content.ContextWrapper.getPackageName(ContextWrapper.java:127) 08-06 04:02:31.350:E/AndroidRuntime(8261):位于com.example.windowcard.dbHelp.(dbHelp.java:39) 08-06 04:02:31.350:E/AndroidRuntime(8261):位于com.example.windowcard.Grade1.(Grade1.java:41)

数据库

package com.example.windowcard;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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.util.Log;


   public class dbHelp extends SQLiteOpenHelper{

//The Android's default system path of your application database.
private static String TAG = "dbHelp";
private static String DB_PATH = "";

private static String DB_NAME = "sample";

private SQLiteDatabase myDataBase; 

private final Context myContext;

/**
 * Constructor
 * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
 * @param context
 */
public dbHelp(Context context) {

    super(context, DB_NAME, null, 1); //

    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    this.myContext = context;
}   

/**
 * Creates a empty database on the system and rewrites it with your own database.
 * */
public void createDataBase() throws IOException{

    myContext.deleteDatabase(DB_NAME);
    boolean dbExist = checkDataBase();

    if(!dbExist){
        //do nothing - database already exist
        this.getReadableDatabase();
        this.close();
        try{
            copyDataBase();
            Log.e(TAG, "create Database database created"); 
        }
        catch (IOException e){
            throw new Error ("Error Copying Database");

        }

    }

}

/**
 * Check if the database already exist to avoid re-copying the file each time you open the application.
 * @return true if it exists, false if it doesn't
 */
private boolean checkDataBase(){


    File dbFile = new File (DB_PATH + DB_NAME);
    Log.v("dbFile", dbFile + " " + dbFile.exists());
    return dbFile.exists();

/**
 * Copies your database from your local assets-folder to the just created empty database in the
 * system folder, from where it can be accessed and handled.
 * This is done by transfering bytestream.
 * */
private void copyDataBase() throws IOException{

    //Open your local db as the input stream
    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();

}

public boolean openDataBase() throws SQLException{

    //Open the database
    String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
    // myDatabase =
    SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    return myDataBase != null;

}

@Override
public synchronized void close() {

    if(myDataBase != null)
        myDataBase.close();

    super.close();

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

// Add your public helper methods to access and get content from the database.
// You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
// to you to create adapters for your views.

public Cursor getAllGrade1(){

    this.openDataBase();
    String sql = "Select * from gr1";
    Cursor  c = myDataBase.rawQuery(sql, null);
    c.moveToFirst();
    return c;
}
public String getScore(int score){
    this.openDataBase();
    String sql = "SELECT * FROM gr1 WHERE _id =" + score;
    Cursor c = myDataBase.rawQuery(sql, null);
    c.moveToFirst();
    return c.getString(c.getColumnIndex("score"));
}
public String getMistakes(int Errors){
    this.openDataBase();
    String sql="SELECT * FROM gr1 WHERE _id=" + Errors;
    Cursor c = myDataBase.rawQuery(sql, null);
    c.moveToFirst();
    return c.getString(c.getColumnIndex("Errors"));
}

    }
活动

            package com.example.windowcard;

            import java.util.ArrayList;
            import java.util.Collections;
            import android.app.Activity;
            import android.app.AlertDialog;
            import android.content.DialogInterface;
            import android.content.Intent;
            import android.database.Cursor;
            import android.media.MediaPlayer;
            import android.os.Bundle;
            import android.os.Handler;
            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 Grade1 extends Activity implements OnClickListener {
            TextView tvQuestion,tvQuestionId,tvPlayer1,tvScore,tvMissCount;
            EditText et;
            Button submit,next,start;
            Cursor c;
            MediaPlayer sonic;
            Handler mHandler = new Handler();
            long startTime;
            TextView timer,timems;
            long elapsedTime;
            final int REFRESH_RATE = 100;
            String hours,minutes,seconds,milliseconds;
            long secs,mins,hrs,msecs;
            boolean stopped = false;
            String s,timers;
            int score=1;
            int miss=1;
            dbHelp dbh = new dbHelp(this);
            ArrayList<Integer> rdm = new ArrayList<Integer>();
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.grade1);
                sonic = MediaPlayer.create(Grade1.this,R.raw.sonic);
                sonic.start();
                sonic.setLooping(true);
                sonic.setVolume(100, 100);
                initialize();   

                }
            public void updateTimer (float time){
                secs = (long)(time/1000);
                mins = (long)((time/1000)/60);
                hrs = (long)(((time/1000)/60)/60);


                secs = secs % 60;
                seconds=String.valueOf(secs);
                if(secs == 0){
                    seconds = "00";
                }
                if(secs <10 && secs > 0){
                    seconds = "0"+seconds;
                }



                mins = mins % 60;
                minutes=String.valueOf(mins);
                if(mins == 0){
                    minutes = "00";
                }
                if(mins <10 && mins > 0){
                    minutes = "0"+minutes;
                }


                hours=String.valueOf(hrs);
                if(hrs == 0){
                    hours = "00";
                }
                if(hrs <10 && hrs > 0){
                    hours = "0"+hours;
                }


                milliseconds = String.valueOf((long)time);
                if(milliseconds.length()==2){
                    milliseconds = "0"+milliseconds;
                }
                if(milliseconds.length()<=1){
                    milliseconds = "00";
                }
                //milliseconds = milliseconds.substring(milliseconds.length(), milliseconds.length());

                (timer = (TextView)findViewById(R.id.tvTime)).setText(hours + ":" + minutes + ":" + seconds);
                //((TextView)findViewById(R.id.tvTimeMs)).setText(":" + milliseconds);
            }
            public Runnable startTimer = new Runnable() {
                   public void run() {
                       elapsedTime = System.currentTimeMillis() - startTime;
                       updateTimer(elapsedTime);
                       mHandler.postDelayed(this,REFRESH_RATE);
                    }
                };
                public void startClick (View view){
                    if(stopped){
                        startTime = System.currentTimeMillis() - elapsedTime;
                    }
                    else{
                        startTime = System.currentTimeMillis();
                    }
                    mHandler.removeCallbacks(startTimer);
                    mHandler.postDelayed(startTimer, 0);
                }
                  public void stopClick (View view){
                        mHandler.removeCallbacks(startTimer);
                        stopped = true;
                    }

                    public void resetClick (View view){
                        stopped = false;
                        ((TextView)findViewById(R.id.tvTime)).setText("00:00:00");
                        //((TextView)findViewById(R.id.tvTimeMs)).setText(":0");
                    }
            private void refresh(){

                c = dbh.getAllGrade1();
                c.moveToPosition(rdm.get(0));
                rdm.remove(0);
                tvScore.setText(dbh.getScore(score));
                tvMissCount.setText(dbh.getMistakes(miss));
                tvPlayer1.setText(s);   
                //tvQuestion.setText(c.getString(c.getColumnIndex("Question")));
                tvQuestion.setText(c.getString(1));
                et.setText("");
            }


            private void initialize() {
                // TODO Auto-generated method stub
                submit= (Button) findViewById(R.id.b1);
                //tvQuestionId = (TextView) findViewById(R.id.tvQuestionId);
                tvPlayer1 = (TextView) findViewById(R.id.tvPlayer1);
                tvScore = (TextView) findViewById(R.id.tvScore);
                tvQuestion = (TextView) findViewById(R.id.tvQuestion);
                tvMissCount = (TextView) findViewById(R.id.tvMissCount);
                start = (Button) findViewById(R.id.bStart);
                et = (EditText) findViewById(R.id.et1);
                Intent z = getIntent();
                s = z.getExtras().getString("PlayerName");
                submit.setVisibility(View.INVISIBLE);
                et.setVisibility(View.INVISIBLE);
                tvQuestion.setVisibility(View.INVISIBLE);
                //Bundle receive = getIntent().getExtras();
                //hold =  receive.getString("PlayerName")

                for(int count=0; count<10; count++){
                    rdm.add(count);
                }
                Collections.shuffle(rdm);
                refresh();
                final MediaPlayer mp = MediaPlayer.create(this, R.raw.answerright);
                final MediaPlayer mp2= MediaPlayer.create(this, R.raw.answerwrong);

                start.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        if (start.isClickable()){
                            et.setVisibility(View.VISIBLE);
                            submit.setVisibility(View.VISIBLE);
                            tvQuestion.setVisibility(View.VISIBLE);
                            startClick(arg0);
                            start.setVisibility(View.INVISIBLE);
                        }
                    }
                });
                submit.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        if(et.getText().toString().equalsIgnoreCase("")){
                            Toast.makeText(getApplicationContext(), "You need to answer first the question before proceeding to the next question", Toast.LENGTH_SHORT).show();
                        }else{
                            if (c.getString(c.getColumnIndex("Answer")).equalsIgnoreCase(et.getText().toString())){
                                mp.start();
                                if(score==10){
                                    stopClick(v);
                                     timers = timer.getText().toString();

                                //  dbh.insertRecord1(s, score,timers,miss);
                                    resetClick(v);
                                    AlertDialog diaBox = makneAndShowDialogBox();
                                    diaBox.show();
                                    diaBox.setCanceledOnTouchOutside(false);

                                    //Toast.makeText(getApplicationContext(), "Congratulations!", Toast.LENGTH_LONG).show();
                                    sonic.release();
                                    //Intent a = new Intent(Grade1.this,Menu.class);
                                    //startActivity(a);
                                    //finish();
                                }
                                String Score = tvScore.getText().toString();
                                score++;
                                //String newScore = dbh.getScore(score);
                                refresh();
                            }
                            else{
                            mp2.start();
                            String Miss = tvMissCount.getText().toString();
                            miss++; 
                        //  String newMiss = dbh.getMistakes(miss);
                            refresh();
                            }
                        }




                }
                });
            }
                private AlertDialog makneAndShowDialogBox() {
                    // TODO Auto-generated method stub
                    AlertDialog myDialogBox = new AlertDialog.Builder(this)
                    .setTitle("Congratulations!!") 
                    .setMessage("Congratulations on finishing the game!")
                    .setPositiveButton("Main Menu", new DialogInterface.OnClickListener() { 
                        public void onClick(DialogInterface dialog, int whichButton) { 
                            Intent i = new Intent(Grade1.this,Menu.class);
                            startActivity(i);
                            finish();
                            dialog.dismiss();
                        }

                })

                .create();
                return myDialogBox;






            /** next.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        int count = 0;
                        // TODO Auto-generated method stub
                        if(count==40){
                            Intent a = new Intent(Grade1.this,Menu.class);
                            startActivity(a);
                            finish();
                        }
                        count++;
                    refreshgame();
                    }
                });

            **/


                        }

                        @Override
                        protected void onPause() {
                            // TODO Auto-generated method stub
                            super.onPause();
                            sonic.release();
                            finish();
                        }
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub

                        }
                        }
package com.example.windowcard;
导入java.util.ArrayList;
导入java.util.Collections;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.database.Cursor;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.os.Handler;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
公共类Grade1扩展了活动实现OnClickListener{
TextView tvQuestion、tvQuestionId、tvPlayer1、tvScore、tvMissCount;
编辑文本;
按钮提交,下一步,开始;
光标c;
MediaPlayer sonic;
Handler mHandler=新的Handler();
长启动时间;
文本视图定时器,timems;
时间长;
最终整数刷新率=100;
字符串小时、分钟、秒、毫秒;
长秒、分钟、小时、毫秒;
布尔停止=假;
字符串s,计时器;
智力得分=1;
int-miss=1;
dbHelp dbh=新的dbHelp(this);
ArrayList rdm=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.Grade 1);
sonic=MediaPlayer.create(1级,此为R.raw.sonic);
sonic.start();
sonic.setLooping(真);
音速设定音量(100100);
初始化();
}
公共void updateTimer(浮动时间){
秒=(长)(时间/1000);
分钟=(长)((时间/1000)/60);
小时=(长)((时间/1000)/60)/60);
秒=秒%60;
秒=字符串.valueOf(秒);
如果(秒=0){
秒数=“00”;
}
如果(秒0){
秒=“0”+秒;
}
分钟=分钟%60;
分钟=字符串.valueOf(分钟);
如果(分钟==0){
分钟=“00”;
}
如果(分钟0){
分钟=“0”+分钟;
}
小时=字符串的值(小时);
如果(小时==0){
小时数=“00”;
}
若有(小时0){
小时数=“0”+小时数;
}
毫秒=String.valueOf((长)时间);
if(毫秒.length()==2){
毫秒=“0”+毫秒;
}

如果(毫秒.length()
dbHelp dbh=new dbHelp(this);
将这一行放入
OnCreate

中,问题是您正在将空上下文传递给dbHelp,请尝试找出您的上下文为空的原因;