java - 如何在按钮单击事件上将 EditText 数据添加到数据库?

标签 java android database sqlite

我是 Android 编程新手。我已经在单独的 java 类中创建了一个数据库,并且我有一个 Activity ,我想要一些数据,特别是在单击按钮时将 EditText 中的数据存储到数据库中。我在代码中做错了什么?在我将数据库代码包含在 OnClick 事件中后,它不会启动我的 savecount Activity 。

当 SaveClass Activity 启动时,它会卡住应用程序,并且 Eclipse 会显示以下消息:“未找到源”,并提供“编辑源查找路径”选项。

Logcat 在递归中显示以下内容,直到启动超时:

08-08 18:06:37.313: D/dalvikvm(1676): threadid=1: still suspended after undo (sc=1 dc=1)
08-08 18:06:37.323: I/dalvikvm(1676): Wrote stack traces to '/data/anr/traces.txt'
08-08 18:06:37.793: I/Process(896): Sending signal. PID: 1676 SIG: 3
08-08 18:06:37.793: I/dalvikvm(1676): threadid=3: reacting to signal 3
08-08 18:06:37.823: D/dalvikvm(1676): threadid=1: still suspended after undo (sc=1 dc=1)
08-08 18:06:37.823: I/dalvikvm(1676): Wrote stack traces to '/data/anr/traces.txt'
08-08 18:06:38.042: W/ActivityManager(896): Launch timeout has expired, giving up wake lock!
08-08 18:06:38.175: W/ActivityManager(896): Activity idle timeout for ActivityRecord{b4bf2e18 com.simple.tally.counter/.SaveCount}

classdbOpenHelper

package com.simple.tally.counter;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class classdbOpenHelper extends SQLiteOpenHelper {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_COUNTED = "countedno";
    public static final String KEY_DESC = "countdesc";
    public static final String KEY_DATE = "countdate";

    public static final String DATABASE_NAME= "countdb";
    public static final String DATABASE_TABLE = "countable";
    public static final int DATABASE_VERSION = 1;


    public classdbOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE" + DATABASE_TABLE + " (" +
        KEY_ROWID + " INTEGET PRIMARY KEY AUTOINCREMENT " +
        KEY_COUNTED + " INTEGER " +
        KEY_DESC + " TEXT NOT NULL " +
        KEY_DATE + " TEXT NOT NULL);"
                ); 
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXITS " + DATABASE_TABLE);
        onCreate(db);

    }

}

SaveCount.java

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.content.Intent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;

public class SaveCount extends Activity {
TextView metersave;
classdbOpenHelper eventsData;
EditText desc;
Button Save;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_save_count);        
        Intent launchNewIntent = getIntent();
        String count = launchNewIntent.getStringExtra(SimpleTallyCounter.EXTRA_MESSAGE);
        metersave = (TextView) findViewById(R.id.metersave);
        metersave.setText(count); 
        final Button Save = (Button) findViewById(R.id.Save);
        Save.setOnClickListener(new clicker());
        eventsData = new classdbOpenHelper(this);
        desc = (EditText) findViewById(R.id.desc);
    }

    @Override
    public void onDestroy() {
      eventsData.close();
    }

    class clicker implements Button.OnClickListener {
        public void onClick(View v) {
            String descvalue = desc.getText().toString();
            uSQLiteDatabase db = eventsData.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put(classdbOpenHelper.KEY_COUNTED, metersave.getText().toString());
            cv.put(classdbOpenHelper.KEY_DESC, descvalue);
            cv.put(classdbOpenHelper.KEY_DATE, System.currentTimeMillis());
            db.insert(classdbOpenHelper.DATABASE_TABLE, null, cv);
        }
    }


}

最佳答案

像这样createComment使用它在数据库中存储值

   ed1 = (EditText) findViewById(R.id.ed1);
   ed2 = (EditText) findViewById(R.id.ed2);
   ed3 = (EditText) findViewById(R.id.ed3);


  String str1 = ed1.getText().toString();
  String str2 = ed2.getText().toString();
  String str3 = ed3.getText().toString();
// stord data base values in database            
 comment = datasource.createComment(str1, str2 ,str3);

anr 检索数据库值getAllAccounts在另一个 Activity 中

  AccountDataSource data = new AccountDataSource(getActivity());
    data.open();
    Accounts_list = data.getAllAccounts();

如见http://www.vogella.com/articles/AndroidSQLite/article.html它已被充分利用。

关于java - 如何在按钮单击事件上将 EditText 数据添加到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864868/

相关文章:

java - MacOS 无法识别 MacOS 10.14.6 上更新的 Java

java - 使用单个 Spring Boot 应用程序收听多个 IBM MQ

mysql - 如何查找另一个表中不存在的内容?

java - 让 LocalDate 显示在 Javafx 的 Tableview 中

java - 谷歌日历,如 Swing 应用程序

android - 我们可以在 Firebase Cloud Messaging 中创建多少主题?

java - 删除 Activity 中的标题栏也会删除图像

android - 如何在android中使用HttpPost上传图片和视频文件

json - MongoDB 更改/更新子文档字段

php检查当前密码错误