有人可以帮我解决数据库吗?

时间:2015-12-07 08:13:39

标签: java android database

大家好我正在构建一个具有timepicker的android应用程序。我想要的是我想在用户点击两次保存按钮时更新数据库。请指导我如何做到这一点。现在我的应用程序崩溃了,因为没有更新数据库。

TimeTable.java

    public class Monday extends FragmentActivity implements TimePickerFragment.TimePickerDialogListener {
    EditText et1, et2, et3;
    TextView tvm;
    LinearLayout llm;
    int fhour, fmin, thour, tmin, j;
    private int cnt = 0;
    View vi[] = new View[100];
    TimeTableDbHelper db;
    String txt,fmeridien,tmeridien,ftime,ttime;
    private static final int START_TIME_PICKER_ID = 1;
    private static final int END_TIME_PICKER_ID = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        setContentView(R.layout.activity_monday);
        tvm = (TextView) findViewById(R.id.tvm);
        llm = (LinearLayout) findViewById(R.id.llm);
        db = new TimeTableDbHelper(this);

        cnt = db.check("timetableM");
        if (cnt > 0) {
            int i;
            for (i = 0; i < cnt; i++) {
                LinearLayout mn = (LinearLayout) findViewById(R.id.llm);
                View view = getLayoutInflater().inflate(R.layout.activity_timepicker, mn, false);
                vi[i] = view;
                mn.addView(view);
                et1 = (EditText) vi[i].findViewById(R.id.txtTime);
                et1.setText(db.rd1(i,1));
                //Log.i("Monday", "Database read" + db.read(2) + db.read(3));
                et2 = (EditText) vi[i].findViewById(R.id.txtTime2);
                et2.setText(db.rd1(i,2));
                //Log.i("Monday", "Database read" + db.read(4) + db.read(5));
                et3 = (EditText) vi[i].findViewById(R.id.txtSet);
                et3.setText(db.rd1(i,3));
            }
            j = i;
        } else {
            j = 0;
        }

    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement

        return super.onOptionsItemSelected(item);
    }

    public void setTime(View v) {
        LinearLayout main = (LinearLayout) findViewById(R.id.llm);
        View view = getLayoutInflater().inflate(R.layout.activity_timepicker, main, false);
        view.setTag(j);
        main.addView(view);
        vi[j] = view;
    }

    public void setTime2(View v) {
        DialogFragment newFragment = TimePickerFragment.newInstance(START_TIME_PICKER_ID);
        newFragment.show(getFragmentManager(), "timePicker");
    }

    public void setTime3(View v) {
        DialogFragment newFragment = TimePickerFragment.newInstance(END_TIME_PICKER_ID);
        newFragment.show(getFragmentManager(), "timePicker");
    }

    @Override
    public void onTimeSet(int id, TimePicker view, int hourOfDay, int minute) {
        Log.i("TimePicker", "Time picker set from id " + id + "!");
        if (id == START_TIME_PICKER_ID) {
            et1 = (EditText) vi[j].findViewById(R.id.txtTime);

            fmin = minute;
            if(hourOfDay <= 12) {
                fhour = hourOfDay;
                fmeridien = "AM";
            } else {
                fhour = hourOfDay-12;
                fmeridien = "PM";
            }
                ftime =fhour + ":" + fmin + fmeridien;

            et1.setText(ftime);
        } else {
            et2 = (EditText) vi[j].findViewById(R.id.txtTime2);
            tmin = minute;
            if(hourOfDay < 12) {
                thour = hourOfDay;
                tmeridien = "AM";
            } else {
                thour = hourOfDay-12;
                tmeridien = "PM";
            }
            ttime = thour + ":" + tmin +tmeridien;
            et2.setText(ttime);
        }
    }
    public void Save(View v)
    {
        int position = (int) v.getTag();
        if(position<j);
        else {
            et3 = (EditText) vi[j].findViewById(R.id.txtSet);
            txt = et3.getText().toString();
            Log.i("Position", "Value is " + position);

            db.write1(j, ftime, ttime, txt);
            Toast.makeText(this, "Successfully saved", Toast.LENGTH_LONG).show();

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        Calendar c = Calendar.getInstance();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        int day = c.get(Calendar.DAY_OF_WEEK);
        int value;
        if(fmeridien=="AM") value=0;
        else value=1;
        c.set(Calendar.DAY_OF_WEEK,day);
        c.set(Calendar.AM_PM, value);
        c.set(Calendar.HOUR, fhour);
        c.set(Calendar.MINUTE, fmin);
        c.set(Calendar.SECOND,0);
        Intent i = new Intent("com.example.annu.sheduler.DisplayNotification");
        //---assign an ID of 1---
        i.putExtra("NotifID", j);
        i.putExtra("text",txt);
        PendingIntent displayIntent = PendingIntent.getActivity(
                getBaseContext(), j, i, 0);
        j++;
        //---sets the alarm to trigger---
        alarmManager.set(AlarmManager.RTC_WAKEUP,
                c.getTimeInMillis(), displayIntent);}
    }
}

activity_monday.xml

    <LinearLayout android:id="@+id/llm"
              xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              tools:context="com.example.annu.sheduler.Monday"
              android:background="#ffffa751"
              android:label="Monday">

    <TextView
        android:id="@+id/tvm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="setTime"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="16dp"
        android:text="Create a schedule"
        android:textStyle="bold"
        android:textSize="24sp"/>
</LinearLayout>

activity_timepicker.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1">

    <EditText
        android:id="@+id/txtTime"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".30"
        android:hint="From"
        android:onClick="setTime2"/>

    <EditText
        android:id="@+id/txtTime2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".30"
        android:hint="To"
        android:onClick="setTime3"/>

    <EditText
        android:id="@+id/txtSet"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".40"
        android:hint="Description!!!"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:onClick="Save"
        android:minHeight="0dp"
        android:minWidth="20dp"/>
</LinearLayout>

TimeTableDbHelper.java

    public class TimeTableDbHelper extends SQLiteOpenHelper {
    public static final String TABLE_NAMEM = "timetableM";
    public static final String COLUMN_NO1 = "c_no1";
    public static final String COLUMN_FROM_TIME1 = "FTIME1";
    public static final String COLUMN_TO_TIME1 = "TTIME1";
    public static final String COLUMN_DESC1 = "Description1";
    private static final int DATABASE_VERSION = 1;
    static final String DATABASE_NAME = "TimeTable.db";
    public TimeTableDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        final String SQL_CREATE_TIME_TABLE1 = "CREATE TABLE " + TABLE_NAMEM + " (" +
                COLUMN_NO1 + " INTEGER PRIMARY KEY, " +
                COLUMN_FROM_TIME1 + " STRING NOT NULL," +
                COLUMN_TO_TIME1 + " STRING NOT NULL," +
                COLUMN_DESC1 + " TEXT NOT NULL" +
                " );";
        sqLiteDatabase.execSQL(SQL_CREATE_TIME_TABLE1);
    }     
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAMEM);
        onCreate(sqLiteDatabase);
    }   
    public void write1(int column_no, String ftime, String ttime, String desc) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NO1, column_no);
        values.put(COLUMN_FROM_TIME1, ftime);
        values.put(COLUMN_TO_TIME1, ttime);
        values.put(COLUMN_DESC1, desc);
        Boolean res = CheckIsDataAlreadyInDBorNot(TABLE_NAMEM, COLUMN_NO1, column_no);
        if (res == false) db.insert(TABLE_NAMEM, null, values);
        else db.update(TABLE_NAMEM, values, null, null);
        db.close();
    }    
    public int check(String tname) {
        SQLiteDatabase db = this.getWritableDatabase();
        String count = "SELECT count(*) FROM " + tname;
        Cursor mcursor = db.rawQuery(count, null);
        mcursor.moveToFirst();
        int icount = mcursor.getInt(0);
        return icount;
    }   
    public String rd1(int c_no, int col) {
        String selectQuery = "SELECT * FROM " + TABLE_NAMEM + " WHERE " + COLUMN_NO1 + " = " + c_no;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        String data = "";
        if (cursor.moveToFirst()) {
            // get  the  data into array,or class variable
            do {
                data = cursor.getString(col);
                //Log.i("TimeTableDbHelper", "Value read " + cursor.getString(6));
            } while (cursor.moveToNext());
        }
        db.close();
        return data;
    }
    public boolean CheckIsDataAlreadyInDBorNot(String TableName,
                                               String dbfield, int fieldValue) {
        SQLiteDatabase db = this.getReadableDatabase();
        String Query = "Select * from " + TableName + " where " + dbfield + " = " + fieldValue;
        Cursor cursor = db.rawQuery(Query, null);
        if (cursor.getCount() <= 0) {
            cursor.close();
            return false;
        }
        cursor.close();
        return true;
    } 
}

1 个答案:

答案 0 :(得分:0)

如上所述 https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])

  

返回:
  受影响的行数

所以你可以这样做:

if (db.update(TABLE_NAMEM, values, null, null) == 0)
  db.insert(TABLE_NAMEM, null, values);

db.close();