【问题标题】:Eclipse data not inserting into SQLite Database and crashingEclipse 数据未插入 SQLite 数据库并崩溃
【发布时间】:2013-10-22 06:44:27
【问题描述】:

当我点击按钮时,它应该将输入的数据连同从单独活动中收集的经度和纬度一起存储到数据库中。我不确定我做错了什么,我的其他数据库工作正常。任何帮助,将不胜感激。我将在下面发布代码:

这是活动java。

public class NoteActivity extends Activity implements OnClickListener {

Button buttonLeaveNote; 

private EditText mTitle;
private EditText mDesc;

protected NoteDBHelper noteDB = new NoteDBHelper(NoteActivity.this);

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

    buttonLeaveNote = (Button) findViewById(R.id.buttonLeaveNote);
    buttonLeaveNote.setOnClickListener(this);

    mTitle = (EditText)findViewById(R.id.etitle);
    mDesc = (EditText)findViewById(R.id.edesc);
}

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

@Override
public void onClick(View v) {
    switch(v.getId()){

    case R.id.buttonLeaveNote:

           String title = mTitle.getText().toString();
           String desc = mDesc.getText().toString();
           Intent intent = getIntent();
           String lati = intent.getExtras().getString("lati");
           String lng = intent.getExtras().getString("lng");

           boolean invalid = false;

           if(title.equals(""))
           {
            invalid = true;
            Toast.makeText(getApplicationContext(), "Please enter a title",          Toast.LENGTH_SHORT).show();
           }
           else
               if(desc.equals(""))
               {
                  invalid = true;
                  Toast.makeText(getApplicationContext(), "Please enter description", Toast.LENGTH_SHORT).show();

               } 

               else

                   if(invalid == false)
                   {
                       addEntry(title, desc, lati, lng);
                       Intent i_note = new Intent(NoteActivity.this, JustWanderingActivity.class);
                       startActivity(i_note);
                       //finish();
                      }

                      break;
                      }
                    }

public void onDestroy()
{
    super.onDestroy();
    noteDB.close();
}

private void addEntry(String title, String desc, String lati, String lng) 
 {
    SQLiteDatabase notedb = noteDB.getWritableDatabase();
    ContentValues values = new ContentValues();
      values.put("title", title);
      values.put("desc", desc);
      values.put("lati", lati);
      values.put("lng", lng);
      try
      {
       long newRowId;
       newRowId = notedb.insert(NoteDBHelper.DATABASE_TABLE_NAME, null, values);

       Toast.makeText(getApplicationContext(), "Note successfully added", Toast.LENGTH_SHORT).show();
      }

      catch(Exception e)
      {
       e.printStackTrace();
      } 
}
}

这是 SQLite DB Java

public class NoteDBHelper extends SQLiteOpenHelper 

{
private SQLiteDatabase notedb;

public static final String NOTE_ID = "_nid";
public static final String NOTE_TITLE = "title";
public static final String NOTE_DESC = "desc";
public static final String NOTE_LAT = "lati";
public static final String NOTE_LONG = "lng";


NoteDBHelper noteDB = null;
private static final String DATABASE_NAME = "stepsaway.db";
private static final int DATABASE_VERSION = 2;
public static final String DATABASE_TABLE_NAME = "notes";


private static final String DATABASE_TABLE_CREATE =
        "CREATE TABLE" + DATABASE_TABLE_NAME + "(" +
        "_nid INTEGER PRIMARY KEY AUTOINCREMENT," +
        "title TEXT NOT NULL, desc LONGTEXT NOT NULL, lati TEXT NOT NULL, lng, TEXT NOT NULL);";

 public NoteDBHelper(Context context) {

 super(context, DATABASE_NAME, null, DATABASE_VERSION);
 System.out.println("In constructor");
}


@Override
public void onCreate(SQLiteDatabase notedb) {

try{

notedb.execSQL(DATABASE_TABLE_CREATE);


}catch(Exception e){
e.printStackTrace();
}
}



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

}




public Cursor rawQuery(String string, String[] strings) {
// TODO Auto-generated method stub
return null;
}




public void open() {

getWritableDatabase(); 
}


public Cursor getDetails(String text) throws SQLException 
{

Cursor mCursor =
        notedb.query(true, DATABASE_TABLE_NAME, 
          new String[]{NOTE_ID, NOTE_TITLE, NOTE_DESC, NOTE_LAT, NOTE_LONG}, 
          NOTE_TITLE + "=" + text, 
          null, null, null, null, null);
if (mCursor != null) 
{
    mCursor.moveToFirst();
}
return mCursor;


}
}

这是日志猫

FATAL EXCEPTION: main
java.lang.NullPointerException
atcom.example.stepsaway.NoteActivity.onClick(NoteActivity.java:53)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

这里是 putExtra() 调用。

    tvLatitude.setText("Latitude:" +  location.getLatitude());
    tvLongitude.setText("Longitude:" + location.getLongitude());
    String lati = tvLatitude.getText().toString();
    String lng = tvLongitude.getText().toString();
    Intent i = new Intent(this, NoteActivity.class);
    i.putExtra("lati", lati);
    i.putExtra("lng", lng);

【问题讨论】:

  • 请发布日志猫..
  • @user2905867 有什么异常告诉我。

标签: java android sql eclipse


【解决方案1】:

没有 logcat 很难帮助你...所以也发布logcat

一个错误是在您的NoteDBHelper class 内创建表查询...

您忘记在keyword table 和表名(DATABASE_TABLE_NAME) 之间放置空格

所以要么改成:

private static final String DATABASE_TABLE_CREATE =
        "CREATE TABLE " + DATABASE_TABLE_NAME + "(" +
        "_nid INTEGER PRIMARY KEY AUTOINCREMENT," +
        "title TEXT NOT NULL, desc LONGTEXT NOT NULL, lati TEXT NOT NULL, lng, TEXT NOT NULL);";

或者到:

public static final String DATABASE_TABLE_NAME = " notes";

附言。

NullPointerException

在使用intent.getExtras() 之前检查null,并确保您在intent.putExtra() 中传递String 而不是double

intent.putExtra("lati","CheckHere it must be String not double");
intent.putExtra("lng","CheckHere it must be String not double");

以下代码也可以避免崩溃并帮助您正确调试

Intent intent = getIntent();
if(intent != null)
{
    String lati = intent.getExtras().getString("lati");
    String lng = intent.getExtras().getString("lng");
   if(lati == null)
    {
      Log.e("Checking lati","Its Null");
      lati="0";
    }
   if(lng == null)
    {
      Log.e("Checking lng","Its Null");
      lng="0";
    }
}
else
{
  Log.e("Checking intent","Its Null");
}

【讨论】:

  • 啊.. 那个空格,是的,好像我忘了加上那个。除此之外,我仍然遇到同样的错误
  • 意图意图 = getIntent();
  • 代码给了我一个错误,说不能将 int 转换为字符串
  • 好吧,看起来它不是 null,因为它在第 57 行给出了 nullpointer 异常错误,该错误位于以下代码行: String lati = intent.getExtras().getString("lati");和之前的一样
  • @你得到同样的异常吗?你确定你在这里遇到异常String lati = intent.getExtras().getString("lati"); 吗?因为这段代码很好......
【解决方案2】:

addentry 方法应该调用如下:

noteDB.addEntry(title, desc, lati, lng);

【讨论】:

  • 亲爱的.. addEntry()NoteActivity 内,即在同一个班级,那么为什么 noteDB.addEntry...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多