我的数据不会记录在我的Android应用程序的SQLite数据库中

时间:2012-10-13 12:23:24

标签: android android-sqlite

好的家伙,在我之前,我搜索论坛和其他许多人,但我似乎没有找到足够的答案,所以我想我可能会问,我已经创建了这个应用程序来组织这一天,它的工作方式就像这样:   - 我有2个活动,一个用于显示数据(在列表视图中),另一个用于插入,我使用startActivityForResult函数打开第二个活动,然后使用{获取数据{1}}函数我将其插入数据库。 Eclipse doesent向我显示任何错误,LogCat也没有数据doesent似乎插入到Db中,所以我插入了一个try-catch方法,同时插入数据来记录所做的事情,我总是得到数据的异常没记录。我是android的新手,我不认为我做的一切都是正确的。我发布了应用程序的所有代码,因此您可以概览整个过程,但问题(我认为)是创建数据库或插入数据的地方,或者当我尝试获取数据时可能出现的活动数据从一个到另一个。但我不知道在哪里请帮忙!

MainActivity.java:

onActivityResult

New_task.java:

package com.example.dailyplanner;

import android.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {


    private SQLiteDatabase db;
    Intent weather;     
    Intent i;
    String text;
    String date;
    String time;
    ListView lv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        db = openOrCreateDatabase("MyDB", MODE_PRIVATE, null);
        db.execSQL("CREATE TABLE IF NOT EXISTS TaskTbl (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, text VARCHAR(250), time VARCHAR(20), date VARCHAR(20));");


        Button showBtn = (Button) findViewById(R.id.shTask);
        showBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {



            }
        });


        Button nTaskBtn = (Button) findViewById(R.id.nTask);
        nTaskBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent nTaskScreen = new Intent(getApplicationContext() new_task.class);

                startActivityForResult(nTaskScreen, 100);



            }
        });



        Button wthrBtn = (Button) findViewById(R.id.wthrBtn);
        registerForContextMenu(wthrBtn);


        lv = (ListView) findViewById(id.list);



    }








    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);

        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.cities, menu);


    }


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        return super.onContextItemSelected(item);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode==100)
        {
            i = getIntent();        
        String text = i.getStringExtra("text");
            String date = i.getStringExtra("date");
            String time = i.getStringExtra("time");
                try{


                db.execSQL("INSERT INTO TaskTbl (text,time,date) VALUES("+text+", "+time+", "+date+");");        

                Log.d("db","data was recorded");
            }
            catch (Exception e)
            {
                Log.e("db", "data was not recorded");

            }



        }

    }
}

这是LogCat:

package com.example.dailyplanner;

import android.R.string;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.net.UrlQuerySanitizer.ValueSanitizer;
import android.os.Bundle;
import android.renderscript.Sampler.Value;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

public class new_task extends Activity {

    static final int TIME_DIALOG_ID=0;
    static final int DATE_DIALOG_ID=1;
    public TextView timeText;
    public TextView dateText;
    public EditText taskText;



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


        timeText = (TextView) findViewById(R.id.timeTxt);
        dateText = (TextView) findViewById(R.id.dateTxt);
        taskText = (EditText) findViewById(R.id.editText1);

        Button btnSave = (Button) findViewById(R.id.btnSave);
        btnSave.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent i = new Intent(getApplicationContext(),     MainActivity.class);

                i.putExtra("date", dateText.getText().toString());
                i.putExtra("time", timeText.getText().toString());
                i.putExtra("text", taskText.getText().toString());

                setResult(100);

                finish();




            }
        });



        Button btnCancel = (Button) findViewById(R.id.btnCancel);
        btnCancel.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                finish();


            }
        });


    Button btnSetTime = (Button) findViewById(R.id.btnSetTime);
        btnSetTime.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                showDialog(TIME_DIALOG_ID);

            }
            });

        Button btnSetDate = (Button) findViewById(R.id.btnSetDate);
        btnSetDate.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                showDialog(DATE_DIALOG_ID);

            }
        });



    }

    TimePickerDialog.OnTimeSetListener mTimeSetListener = new     TimePickerDialog.OnTimeSetListener() {

                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    timeText.setText(hourOfDay+":"+minute);
                    };

    };


    DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {

            dateText.setText(dayOfMonth+"."+monthOfYear+"."+year);

        }
    };


    protected Dialog onCreateDialog(int id){
        switch(id){

        case TIME_DIALOG_ID:
        return new TimePickerDialog(this, mTimeSetListener, 0, 0, true);

        case DATE_DIALOG_ID:
            return new DatePickerDialog(this, mDateSetListener, 2011, 1, 28);


        }
        return null;

    }


}

1 个答案:

答案 0 :(得分:0)

在询问异常时,您应始终从logcat发布堆栈跟踪。

但是,我可以看到你的插入失败的原因。文本数据和日期应使用单引号分隔。

INSERT INTO foo VALUES (myTextData)

将失败

INSERT INTO foo VALUES ('myTextData')

会奏效。

使用“'”+ text +“'”

db.execSQL("INSERT INTO TaskTbl (text,time,date) VALUES(" + "'" + text + "', '" + time + "', '" + date + "');"); 

在构建此类字符串时,请使用IDE编辑器中的语法颜色突出显示来检查您是否在正确的位置显示引号。例如,在我的IDE中,字符串以绿色显示,标识符为黑色。

[编辑]

约束异常意味着您正在尝试添加重复的行。如果不允许重复,则应相应地处理此异常。如果允许重复,则使用_id列作为主要列。我想你可能试过这样做但是你的create语句添加了一个名为“id”的列,而不是“_id”。如果实际上您打算使用“id”,则必须在INSERT中为该列使用唯一值,因为您已指定它是主键。