2017-02-11 52 views
0

到目前爲止,我的項目看起來像這樣。在Android應用程序中寫入數據庫

MainActivity.java

package com.example.soultaker.myovertimesapplication; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.Button; 
import android.view.View; 

import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button = (Button) findViewById(R.id.btn_add); 
     Button button1 = (Button) findViewById(R.id.btn_logs); 
     button.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       Intent intent = new Intent(MainActivity.this, AddActivity.class); 
       startActivity(intent); 

      } 
     }); 
     button1.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       Intent intent = new Intent(MainActivity.this, LogsActivity.class); 
       startActivity(intent); 

      } 
     }); 
    } 
} 

activity_main.xml中

<TextView 
     android:id="@+id/lblDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/tvDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <DatePicker 
     android:layout_width="347dp" 
     android:layout_height="96dp" 
     android:id="@+id/dobPicker" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     android:calendarViewShown="false" 
     app:layout_constraintVertical_bias="0.0" 
     app:layout_constraintHorizontal_bias="0.61" /> 

    <EditText 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:ems="10" 
     android:id="@+id/addHoursText" 
     android:layout_marginTop="16dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     app:layout_constraintVertical_bias="0.39" 
     android:hint="Εισάγετε Ώρες" 
     android:textAlignment="center" 
     style="@style/Widget.AppCompat.EditText" 
     android:layout_width="145dp" 
     android:maxLength="2" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Spinner 
     android:spinnerMode="dialog" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     android:entries="@array/spinnerItems" 
     android:id="@+id/spinner" 
     android:textAlignment="center" 
     android:clipChildren="false" 
     android:saveEnabled="true" 
     android:layout_height="40dp" 
     android:background="@color/colorPrimary" 
     android:layout_width="100dp" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:foregroundGravity="center_horizontal" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_bias="0.6" /> 

    <Button 
     android:text="Πίσω" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btn_back" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     app:layout_constraintHorizontal_bias="0.02" 
     app:layout_constraintVertical_bias="0.96" 
     android:fontFamily="sans-serif-smallcaps" 
     android:textAllCaps="false" 
     android:textSize="18sp" /> 

    <Button 
     android:text="Εισαγωγή" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btn_insert" 
     android:fontFamily="sans-serif-smallcaps" 
     android:textSize="18sp" 
     android:textAllCaps="false" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     app:layout_constraintVertical_bias="0.96" /> 

    <Button 
     android:text="Έξοδος" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button3" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     app:layout_constraintHorizontal_bias="1.0" 
     app:layout_constraintVertical_bias="0.96" 
     android:fontFamily="sans-serif-smallcaps" 
     android:textSize="18sp" 
     android:textAllCaps="false" /> 

    <TextView 
     android:text="Επιλέξτε Βάρδια:" 
     android:layout_width="143dp" 
     android:layout_height="28dp" 
     android:id="@+id/textView" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     android:fontFamily="sans-serif-smallcaps" 
     android:textSize="18sp" 
     android:textAllCaps="false" 
     android:textAlignment="center" /> 

    <Button 
     android:text="Αλλαγή Ημερομηνίας" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btnChangeDate" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="16dp" 
     app:layout_constraintVertical_bias="0.25" 
     android:fontFamily="sans-serif-smallcaps" 
     android:textSize="18sp" 
     android:textAllCaps="false" /> 
</android.support.constraint.ConstraintLayout> 

DatabaseHelper.java

package com.example.soultaker.myovertimesapplication; 

    /** 
    * Created by Soultaker on 17/2/2017. 
    */ 
    import android.content.ContentValues; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.SQLException; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 
    import android.util.Log; 

    public class DatabaseHandler { 
     public static final String KEY_ROWID = "_id"; 
     public static final String KEY_DATE = "date"; 
     public static final String KEY_SHIFT = "shift"; 
     public static final String KEY_HOURS = "hours"; 
     private static final String TAG = "DatabaseHandler"; 
     private static final String DATABASE_NAME = "MyDB"; 
     private static final String DATABASE_TABLE = "Overtimes"; 
     private static final int DATABASE_VERSION = 1; 
     private static final String DATABASE_CREATE = 
       "create table Overtimes (_id integer primary key autoincrement, " 
         + "date text not null, shift text not null, hours text not null);"; 
     private final Context context; 
     private DatabaseHelper DBHelper; 
     private SQLiteDatabase db; 

     public DatabaseHandler(Context ctx) 
     { 
      this.context = ctx; 
      DBHelper = new DatabaseHelper(context); 
     } 

     private static class DatabaseHelper extends SQLiteOpenHelper 
     { 
      DatabaseHelper(Context context) 
      { 
       super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      } 

      @Override 
      public void onCreate(SQLiteDatabase db) 
      { 
       try { 
        db.execSQL(DATABASE_CREATE); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
      { 
       Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
         + newVersion + ", which will destroy all old data"); 
       db.execSQL("DROP TABLE IF EXISTS Overtimes"); 
       onCreate(db); 
      } 
     } 


     //---opens the database--- 
     public DatabaseHandler open() throws SQLException 
     { 
      db = DBHelper.getWritableDatabase(); 
      return this; 
     } 


     //---closes the database--- 
     public void close() 
     { 
      DBHelper.close(); 
     } 


     //---insert a Overtime into the database--- 
     public long insertOvertime(String date, String shift, Integer hours) 
     { 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(KEY_DATE, date); 
      initialValues.put(KEY_SHIFT, shift); 
      initialValues.put(KEY_HOURS, hours); 
      return db.insert(DATABASE_TABLE, null, initialValues); 
     } 


     //---deletes a particular Overtime--- 
     public boolean deleteOvertimes(long rowId) 
     { 
      return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
     } 


     //---retrieves all the Overtimes--- 
     public Cursor getAllOvertimes() 
     { 
      return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_DATE, KEY_SHIFT, KEY_HOURS}, 
        null, null, null, null, null); 
     } 


     //---retrieves a particular Overtimes--- 
     public Cursor getOvertime(long rowId) throws SQLException 
     { 
      Cursor mCursor =db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
          KEY_DATE, KEY_SHIFT, KEY_HOURS}, KEY_ROWID + "=" + rowId, null, 
        null, null, null, null); 
      if (mCursor != null) { 
       mCursor.moveToFirst(); 
      } 
      return mCursor; 
     } 


     //---updates a Overtimes--- 
     public boolean updateOvertime(long rowId, String date, String shift, Integer hours) 
     { 
      ContentValues args = new ContentValues(); 
      args.put(KEY_DATE, date); 
      args.put(KEY_SHIFT, shift); 
      args.put(KEY_HOURS, hours); 
      return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
     } 
    } 

AddActivity.java

package com.example.soultaker.myovertimesapplication; 

    import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.widget.Button; 
    import android.view.View; 
    import android.widget.DatePicker; 
    import android.widget.EditText; 
    import android.widget.Spinner; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import java.util.Calendar; 
    import android.app.DatePickerDialog; 
    import android.app.Dialog; 



    import static com.example.soultaker.myovertimesapplication.R.array.spinnerItems; 


    public class AddActivity extends AppCompatActivity { 

     private TextView tvDisplayDate; 
     private DatePicker dpResult; 
     private Button btnChangeDate,btnback,btninset; 

     private int year; 
     private int month; 
     private int day; 

     static final int DATE_DIALOG_ID = 999; 

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

      setCurrentDateOnView(); 
      addListenerOnButton(); 

      final Button btnback = (Button) findViewById(R.id.btn_back); 
      final Button btninsert = (Button) findViewById(R.id.btn_insert); 
      final Spinner shift = (Spinner) findViewById(R.id.spinner); 
      final EditText hours = (EditText) findViewById(R.id.addHoursText); 
      final DatabaseHandler db = new DatabaseHandler(AddActivity.this); 

      btninsert.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        db.open(); 
db.insertOvertime(date.getText().toString(),//I CANT FIND A WAY TO GET DATE AS STRING AND PUT IT AS TEXT?// 
          shift.getItemAtPosition(spinnerItems).toString(), 
          hours.getText().toString()); 
        db.close(); 
        Toast.makeText(getBaseContext(), "Inserted", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      //---Select All Overtimes--- 
      btnback.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(AddActivity.this, MainActivity.class); 
        startActivity(intent); 
       } 

      }); 
     } 

      // display current date 
     public void setCurrentDateOnView() { 

      tvDisplayDate = (TextView) findViewById(R.id.tvDate); 
      dpResult = (DatePicker) findViewById(R.id.dpResult); 

      final Calendar c = Calendar.getInstance(); 
      year = c.get(Calendar.YEAR); 
      month = c.get(Calendar.MONTH); 
      day = c.get(Calendar.DAY_OF_MONTH); 

      // set current date into textview 
      tvDisplayDate.setText(new StringBuilder() 
        // Month is 0 based, just add 1 
        .append(month + 1).append("-").append(day).append("-") 
        .append(year).append(" ")); 

      // set current date into datepicker 
      dpResult.init(year, month, day, null); 

     } 

     public void addListenerOnButton() { 

      btnChangeDate = (Button) findViewById(R.id.btnChangeDate); 

      btnChangeDate.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        showDialog(DATE_DIALOG_ID); 

       } 

      }); 

     } 

     @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
       case DATE_DIALOG_ID: 
        // set date picker as current date 
        return new DatePickerDialog(this, datePickerListener, 
          year, month,day); 
      } 
      return null; 
     } 

     private DatePickerDialog.OnDateSetListener datePickerListener 
       = new DatePickerDialog.OnDateSetListener() { 

      // when dialog box is closed, below method will be called. 
      public void onDateSet(DatePicker view, int selectedYear, 
            int selectedMonth, int selectedDay) { 
       year = selectedYear; 
       month = selectedMonth; 
       day = selectedDay; 

       // set selected date into textview 
       tvDisplayDate.setText(new StringBuilder().append(month + 1) 
         .append("-").append(day).append("-").append(year) 
         .append(" ")); 

       // set selected date into datepicker also 
       dpResult.init(year, month, day, null); 

      } 
     }; 

    } 

好感謝你的建議我能走的很far.Only一個問題仍然至極,我需要你的幫助。

+0

請參閱本回購。我已經完成了數據庫示例https://github.com/ananth10/DataBaseSample-Android –

回答

0

首先,您在這裏遇到問題:您正在創建不存在於您表格設計中的未使用的列!

db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,SURNAME TEXT,MARKS INTEGER)"); 

您需要修改它來創建一個表包含COL_0所有列COL_5這樣的:

db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME 
       + "(" 
       + COL_0    +" INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + COL_1    + " TEXT, " 
       + COL_2    + " TEXT, " 
       + COL_3    + " TEXT, " 
       + COL_4    + " TEXT, " 
       + COL_5    + " TEXT " 
       + ")" 
     ); 

我想知道如何使該按鈕

只需向您的xml添加一個按鈕,然後按如下方式綁定它:在onCreate

Button button = (Button) findValueById(R.id.YOUR_BUTTON_ID_IN_XML); 

然後設置一個onClick監聽此按鈕,如下所示:

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //call insert here to insert your data in database 
      } 
     }); 

我需要做的日,月,年單獨列或我可以將它們存儲 爲一體?

我會去節省一列的日期,甚至日期和時間在DB 這是創建一個名爲dateTEXT 和的,而不是通過String day,String month,String year到insertData方法,我只會把一個字符串日期創建如下:

String date = day + "/" + month + "/" + year; 

並將其保存在列日期!

而且我可以使用日期選擇器沒有的setdate按鈕 我不建議這樣做,因爲它可以爲用戶帶來不良的UX!

What am I missing? 

我看你應該insertData做工精細,並且可以隨時發佈新問題,如果你有!

+0

@KostasKoustoulidis這是否解決您的問題?如果是,請接受爲答案 –

+0

否。因爲當我發佈某人編輯我的帖子和看到它的人不明白我在問什麼。 –

+0

然後再次編輯它,我會盡力幫助你! –

相關問題