Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否在SQLite数据库中插入值?java.lang.NullPointerException_Android_Sqlite_Insert Update - Fatal编程技术网

Android 是否在SQLite数据库中插入值?java.lang.NullPointerException

Android 是否在SQLite数据库中插入值?java.lang.NullPointerException,android,sqlite,insert-update,Android,Sqlite,Insert Update,我想在数据库中插入一些值。 但是我的代码给出了java.lang.NullPointerException错误。 我是android新手,无法修复此错误。有人能帮忙吗 下面是我添加的新计算 public class Add_new extends Activity { EditText nameText, phoneText, emailText, addressText; ImageView contactImageImgView; List<Contact> Contacts

我想在数据库中插入一些值。 但是我的代码给出了java.lang.NullPointerException错误。 我是android新手,无法修复此错误。有人能帮忙吗

下面是我添加的新计算

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);
}
}
它显示错误在这里

   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

公共类联系人视图扩展活动{

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

立即创建

编辑1:

您不必在循环中设置适配器。只需设置一次适配器,然后将项目添加到循环中的列表li。循环完成后,请调用dataAdapter.notifyDataSetChanged以刷新Gridview

编辑2:


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

您应该先初始化dbHandler变量。 您可以在onCreate方法中或在insert方法的起始行执行此操作。

试试这个

            public class DatabaseHelpere extends SQLiteOpenHelper {   

private static DatabaseHelpere o_instance = null;
public static final String DATABASE_NAME = "test_table";
public static final int DATABASE_VERSION = 1;
public SQLiteDatabase o_db = null;
    public static final String Table1 = "parent_table1";
    public static final String Table2 = "child_table2";

public DatabaseHelpere() {
    super(AndroidContexte.getContext(), DATABASE_NAME, null,
            DATABASE_VERSION);
    o_db = getWritableDatabase();
}

public static DatabaseHelpere getInstance() {   
    if (o_instance == null) {
        o_instance = new DatabaseHelpere();
    }
    return o_instance;    
}   


@Override
public void onCreate(SQLiteDatabase db) {
    final String[] creatStatments = new String[] {
            "create table "
            + Table1
            + " (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name TEXT ,nick_name TEXT , ran_no INTEGER , img_clm BLOB)", 
            "create table "
                    + Table2
                    + " (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name TEXT ,stander TEXT , roll INTEGER , ran_no_forn_k INTEGER , FOREIGN KEY (ran_no_forn_k) REFERENCES "+Table1+" (ran_no));)",

            };     

    for (String sStmt : creatStatments) {
        db.execSQL(sStmt);
    }

}

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

public SQLiteDatabase getDb() {
    return o_db;
}    
}

 and then

        public class AndroidContexte {
private static Context s_oContext;
/**
* Sets the Android context used for file access. Should be set
* at application startup, before the log is used.
* @param oContext Application context
*/
public static synchronized void setContext( Context oContext )
{
s_oContext = oContext;
}

/**
* Sets the Android context used for file access. Should be set
* at application startup, before the log is used.
* @param oContext Application context
*/
public static synchronized Context getContext()
{
return s_oContext;
}
}
在活动中创建对象并在onCreate中初始化

     SQLiteDatabase sql_lite_db_obj;
    ContentValues values ;
        AndroidContexte.setContext(this);    
      sql_lite_db_obj = DatabaseHelpere.getInstance().getDb();
调用插入方法

    insertData(edt_txt_nickname_var.getText().toString().trim(), edt_txt_class.getText().toString().trim() , random_number , ih.getBitmapAsByteArray(R.drawable.index1));
最后

            private void insertData(String name , String class_s , int ran_num , byte[] img) {
    if (values != null) {
        values.clear();     
    }
    if (sql_lite_db_obj == null) {    
        sql_lite_db_obj = DatabaseHelpere.getInstance().getDb();
    }   

    values.put("name", name);   
    //values.put("nick_name", nikname);         
    values.put("nick_name", class_s); 
    values.put("ran_no", ran_num); 
    values.put("img_clm", img);

    sql_lite_db_obj.insert(DatabaseHelpere.Table1, null, values);

}

我照你说的做了。bit still crash应用程序。我用新的logcat更新了我的问题。@Sameera什么是Add_new.java第58行?@Sameera初始化contactsAdapter。我说这个代码是contactAdapter.notifyDataSetChanged@Sameera您是否有将适配器设置为相同的列表视图?。我看不到。contactAdapter为Null Add_new中的第58行是什么?看起来您尚未在onCreate中初始化contactAdapter。您可能希望在doInBackground中的AsyncTask中完成所有数据库工作,最后在onPostExecute中更新适配器。我要在哪里初始化这些对象?等等。。。我张贴完整的代码。。。
     SQLiteDatabase sql_lite_db_obj;
    ContentValues values ;
        AndroidContexte.setContext(this);    
      sql_lite_db_obj = DatabaseHelpere.getInstance().getDb();
    insertData(edt_txt_nickname_var.getText().toString().trim(), edt_txt_class.getText().toString().trim() , random_number , ih.getBitmapAsByteArray(R.drawable.index1));
            private void insertData(String name , String class_s , int ran_num , byte[] img) {
    if (values != null) {
        values.clear();     
    }
    if (sql_lite_db_obj == null) {    
        sql_lite_db_obj = DatabaseHelpere.getInstance().getDb();
    }   

    values.put("name", name);   
    //values.put("nick_name", nikname);         
    values.put("nick_name", class_s); 
    values.put("ran_no", ran_num); 
    values.put("img_clm", img);

    sql_lite_db_obj.insert(DatabaseHelpere.Table1, null, values);