将值插入到SQLite数据库中? java.lang.NullPointerException [英] Insert values in to SQLite database ? java.lang.NullPointerException

查看:103
本文介绍了将值插入到SQLite数据库中? java.lang.NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在数据库中插入一些值. 但是我的代码给出了"java.lang.NullPointerException"错误. 我是Android新手,无法修复此错误.有谁可以帮忙吗?

I want to insert some values in to my database. but my code give "java.lang.NullPointerException" error. I am new to android and i not able to fix this error. can any one help?

下面是我的Add_new Calss

below is my Add_new calss

public class Add_new extends Activity {

EditText nameText, phoneText, emailText, addressText;
ImageView contactImageImgView;
List<Contact> Contacts = new ArrayList<Contact>();
//Uri imageUri = Uri.parse("android.resource://com.kmks.no_user_image.png");
DatabaseHandler dbHandler;
ArrayAdapter<Contact> contactAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_contact_details);

    nameText = (EditText) findViewById(R.id.contactName);
    phoneText = (EditText) findViewById(R.id.editPhone);
    emailText = (EditText) findViewById(R.id.editEmail);
    addressText = (EditText) findViewById(R.id.editAdd);
    contactImageImgView = (ImageView) findViewById(R.id.imgContactView);
}

public void insert(){

    Contact contact = new Contact(dbHandler.getContactsCount(),
            String.valueOf(nameText.getText()),
            String.valueOf(phoneText.getText()),
            String.valueOf(emailText.getText()),
            String.valueOf(addressText.getText()), imageUri);


    if (!contactExists(contact)) {
        dbHandler.createContact(contact);
        Contacts.add(contact);
        contactAdapter.notifyDataSetChanged();
        Toast.makeText(getApplicationContext(), String.valueOf(nameText.getText()) + " has been added to your Contacts!", Toast.LENGTH_SHORT).show();
        return;
    }
    Toast.makeText(getApplicationContext(), String.valueOf(nameText.getText()) + " already exists. Please use a different name.", Toast.LENGTH_SHORT).show();
}

private boolean contactExists(Contact contact) {
    String name = contact.getName();
    int contactCount = Contacts.size();

    for (int i = 0; i < contactCount; i++) {
        if (name.compareToIgnoreCase(Contacts.get(i).getName()) == 0)
            return true;
    }
    return false;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.my_add, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_search:
            insert();
            return true;

        case R.id.action_done:
            insert();

            return true;
        case R.id.action_cancel:
            add_new();
 //           Toast.makeText(getApplicationContext(), "Search Clicked", Toast.LENGTH_SHORT).show();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}
public void add_new(){
    Intent intent = new Intent(this,contact_view.class);
    startActivity(intent);
}
}

下面是我的数据库处理程序类

below is my databasehandler class

 public class DatabaseHandler extends SQLiteOpenHelper {

private  static  final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "contactManager",

TABLE_CONTACTS = "contacts",
        KEY_ID = "id",
        KEY_NAME = "name",
        KEY_PHONE = "phone",
        KEY_EMAIL = "email",
        KEY_ADDRESS = "address",
        KEY_IMAGEURI = "image";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_IMAGEURI + " TEXT)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    onCreate(db);
}

public void createContact(Contact contact) {
    SQLiteDatabase db = getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PHONE, contact.getPhone());
    values.put(KEY_EMAIL, contact.getEmail());
    values.put(KEY_ADDRESS, contact.getAddress());
    values.put(KEY_IMAGEURI, contact.get_imageURI().toString());

    db.insert(TABLE_CONTACTS, null, values);
    db.close();
}

public Contact getContact(int id) {
    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS, KEY_IMAGEURI }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null );

    if (cursor != null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), Uri.parse(cursor.getString(5)));
    db.close();
    cursor.close();
    return contact;
}

public void deleteContact(Contact contact) {
    SQLiteDatabase db = getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + "=?", new String[] { String.valueOf(contact.getId()) });
    db.close();
}

public int getContactsCount() {
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);
    int count = cursor.getCount();
    db.close();
    cursor.close();

    return count;
}

public int updateContact(Contact contact) {
    SQLiteDatabase db = getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PHONE, contact.getPhone());
    values.put(KEY_EMAIL, contact.getEmail());
    values.put(KEY_ADDRESS, contact.getAddress());
    values.put(KEY_IMAGEURI, contact.get_imageURI().toString());

    int rowsAffected = db.update(TABLE_CONTACTS, values, KEY_ID + "=?", new String[] { String.valueOf(contact.getId()) });
    db.close();

    return rowsAffected;
}

public List<Contact> getAllContacts() {
    List<Contact> contacts = new ArrayList<Contact>();

    SQLiteDatabase db = getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);

    if (cursor.moveToFirst()) {
        do {
            contacts.add(new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), Uri.parse(cursor.getString(5))));
        }
        while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return contacts;
}
}

这是我的联系方式

public class Contact {

private String _name, _phone, _email, _address;
private Uri _imageURI;
private  int _id;

public Contact(int id, String name, String phone, String email, String address, Uri imageURI){

    _id = id;
    _name = name;
    _phone = phone;
    _email = email;
    _address = address;
    _imageURI = imageURI;

}

public  int getId() { return _id;}

public String getName(){
    return _name;
}

public String getPhone(){
    return _phone;
}

public String getEmail(){
    return _email;
}

public String getAddress(){
    return _address;
}

public Uri get_imageURI() { return _imageURI;}

}

它显示错误在这里

   public void insert(){

    Contact contact = new Contact(dbHandler.getContactsCount(),
            String.valueOf(nameText.getText()),
            String.valueOf(phoneText.getText()),
            String.valueOf(emailText.getText()),
            String.valueOf(addressText.getText()), imageUri);


    if (!contactExists(contact)) {
        dbHandler.createContact(contact);
        Contacts.add(contact);
        contactAdapter.notifyDataSetChanged();
        Toast.makeText(getApplicationContext(), String.valueOf(nameText.getText()) + " has been added to your Contacts!", Toast.LENGTH_SHORT).show();
        return;
    }
    Toast.makeText(getApplicationContext(), String.valueOf(nameText.getText()) + " already exists. Please use a different name.", Toast.LENGTH_SHORT).show();
    }

logcat

 07-23 04:08:24.267    2332-2332/codes.MUDALIapps.sameera.contact E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: codes.MUDALIapps.sameera.contact, PID: 2332
java.lang.NullPointerException
        at codes.MUDALIapps.sameera.contact.Add_new.insert(Add_new.java:58)
        at codes.MUDALIapps.sameera.contact.Add_new.onOptionsItemSelected(Add_new.java:91)
        at android.app.Activity.onMenuItemSelected(Activity.java:2600)
        at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012)
        at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
        at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546)
        at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
 07-23 04:08:26.823    2356-2356/codes.MUDALIapps.sameera.contact E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
 07-23 04:08:26.823    2356-2356/codes.MUDALIapps.sameera.contact E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
 07-23 04:08:26.831    2356-2356/codes.MUDALIapps.sameera.contact E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
 07-23 04:08:26.831    2356-2356/codes.MUDALIapps.sameera.contact E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384

网格视图clss

公共类contact_view扩展了活动{

public class contact_view extends Activity {

DatabaseHandler mydb;
GridView data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gride_view);

    data = (GridView) findViewById(R.id.grid);

    List<String> li = new ArrayList<String>();
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_spinner_item, li);
    dataAdapter.setDropDownViewResource(R.layout.gride_view);
    try{

  //      mydb = openOrCreateDatabase("contactManager.db",MODE_PRIVATE,null);
       // Cursor cr = mydb.rawQuery("SELECT * FROM contacts",null);
        Cursor cr = (Cursor) mydb.getAllContacts();
        if(cr != null ){
            if(cr.moveToFirst()) {
                do {
                    String id = cr.getString(cr.getColumnIndex("id"));
                    String name = cr.getString(cr.getColumnIndex("name"));

                    li.add(id);
                    li.add(name);

                    data.setAdapter(dataAdapter);
                } while (cr.moveToNext());
            }
            else {
                Toast.makeText(getApplicationContext(),"There is no data",Toast.LENGTH_LONG).show();
            }
        }
        cr.close();
        mydb.close();
    }catch (Exception e){
        Toast.makeText(getApplicationContext(),"Error:"+ e.getMessage(),Toast.LENGTH_LONG).show();

    }



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my_add, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_search:

            return true;

        case R.id.action_call:


            return true;
        case R.id.action_send:


            return true;
        case R.id.action_mail:


            return true;
        case R.id.action_edit:


            return true;
        case R.id.action_delete:


            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}
   }

推荐答案

您需要初始化dbHandler.

onCreate

dbHandler = new DatabaseHandler(this);

您不必将适配器设置为循环.一次设置适配器,然后将项目添加到列表li中.循环完成后,调用dataAdapter.notifyDataSetChanged()刷新Gridview.

You don't have to set adapter in a loop. Set adapter once and add items to list li in loop. After the loop completes call dataAdapter.notifyDataSetChanged() to refresh Gridview.

我仍然看不到您在哪里初始化了contactsAdapter.您只有在onCreate中声明和初始化的dataAdapter.错误太多.

I still don't see where you have initialized contactsAdapter. You have only dataAdapter declared and initialized in onCreate. Too many mistakes.

这篇关于将值插入到SQLite数据库中? java.lang.NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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