简体   繁体   English

致命异常,Java lang空指针异常

[英]Fatal Exception, java lang null pointer exception

My following code shows no errors, yet does not execute. 我的以下代码未显示任何错误,但未执行。

package my.project.mil;

import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Cbdata extends MainActivity {

    public String str;

    public void onReceive(Context context, Intent intent) {
        //---get the CB message passed in---
        Bundle bundle = intent.getExtras();        
        SmsCbMessage[] msgs = null;
        str = "";            
        if (bundle != null)  {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsCbMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++) {
                msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);                
                str += "CB " + msgs[i].getGeographicalScope() + msgs[i].getMessageCode() + msgs[i].getMessageIdentifier() + msgs[i].getUpdateNumber();                     
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";        
            }}
    }

    SQLiteDatabase cd = openOrCreateDatabase("MLIdb", MODE_WORLD_READABLE, null);



    Button submit;
Button viewdb;
EditText name;

@Override
    public void onCreate(Bundle savedInstanceState)
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.seventh);

    viewdb = (Button) findViewById(R.id.viewdb);
    submit = (Button) findViewById(R.id.submit);
    name = (EditText) findViewById(R.id.name);

    submit.setOnClickListener(new View.OnClickListener() 
    {

        public void onClick(View arg0) {

            String locname = name.getText().toString();
            if (locname.length()>0)
            {

                cd.execSQL("CREATE TABLE IF NOT EXITSTS MLITable (CblocationCode INT(10), CblocationName VARCHAR);");
                cd.execSQL("INSERT INTO MLITable VALUES (' ',' ');" +str +locname);
                Toast.makeText(getBaseContext(), "value successfully    entered.", Toast.LENGTH_LONG).show();
            }
            else
            {
                Toast.makeText(getBaseContext(), "Please enter the location name, for example 'Home'.", Toast.LENGTH_LONG).show();
            }

        }
    });

    cd.close();

    viewdb.setOnClickListener(new View.OnClickListener() 
    {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            // here comes the code for viewing the database


        }
    });
}

}

and my error log looks as follows, I've also checked my manifest and MainActivity files yet no luck. 而且我的错误日志如下所示,我还检查了清单文件和MainActivity文件,但没有遇到任何麻烦。

My code is supposed to collect users cell tower area code and save that on a database with users choice of the name, that databases consists of two attributes one the name of the location which is collected from the user and second the cell broadcast tower information which is been obtained from the onReceive method, individually the onReceive method works fine. 我的代码应该收集用户的基站塔区代码,并通过用户选择名称将其保存在数据库中,该数据库由两个属性组成,一个属性是从用户处收集的位置名称,其次是基站的广播塔信息。是从onReceive方法获得的,单独使用onReceive方法可以正常工作。

This problem has occurred only when I've integrated database to my code. 仅当我将数据库集成到代码中时,才会发生此问题。
我的logcat

Thank you. 谢谢。

SQLiteDatabase cd = openOrCreateDatabase("MLIdata", MODE_WORLD_WRITEABLE, null);

尝试将其替换为

SQLiteDatabase cd = openOrCreateDatabase("MLIdata", MODE_WORLD_WRITEABLE);

My Mistakes in the above code, 我在上面的代码中的错误,

  1. cd not all created, due to wrong method of connecting database. 由于连接数据库的方法错误,因此并非全部创建了cd。
  2. EXISTS misspelled. 存在拼写错误。
  3. Wrong method for insert. 插入方法错误。

The final correct code is, 最终正确的代码是

public class Cbdata extends MainActivity {

    public String str;

    public void onReceive(Context context, Intent intent) {
        //---get the CB message passed in---
        Bundle bundle = intent.getExtras();        
        SmsCbMessage[] msgs = null;
        str = "";            
        if (bundle != null)  {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsCbMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++) {
                msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);                
                str += "CB " + msgs[i].getGeographicalScope() + msgs[i].getMessageCode() + msgs[i].getMessageIdentifier() + msgs[i].getUpdateNumber();                     
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";        
            }}
}

Button submit;
Button viewdb;
EditText name;

@Override
public void onCreate(Bundle savedInstanceState)
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.seventh);



    viewdb = (Button) findViewById(R.id.viewdb);
    submit = (Button) findViewById(R.id.submit);
    name = (EditText) findViewById(R.id.name);

    submit.setOnClickListener(new View.OnClickListener() 
    {

        public void onClick(View arg0) {

            String locname = name.getText().toString();
            if (locname.length()>0)
            {
                SQLiteDatabase cd = openOrCreateDatabase("mydata", MODE_WORLD_READABLE, null);
                cd.execSQL("CREATE TABLE IF NOT EXISTS MLITable (CblocationCode INT(10), CblocationName VARCHAR);");
                cd.execSQL("INSERT INTO MLITable VALUES ('"+str+ "','"+locname+ "');");
                Toast.makeText(getBaseContext(), "value successfully entered.", Toast.LENGTH_LONG).show();
                cd.close();
            }
            else
            {
                Toast.makeText(getBaseContext(), "Please enter the location name, for example 'Home'.", Toast.LENGTH_LONG).show();
            }

        }
    });



    viewdb.setOnClickListener(new View.OnClickListener() 
    {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            // here comes the code for viewing the database


        }
    });
}



}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM