2017-02-11 24 views
0

これまでのところ私のプロジェクトはこのように見えます。アンドロイドアプリでデータベースに書き込む

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

あなたのアドバイスに10の
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_5にCOL_0からすべての列が含まれています

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 " 
       + ")" 
     ); 

私はそのボタンを

を作る方法を知っていただきたいと思います

ボタンをあなたに追加して、次のようにバインドしてください:onCreate

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

は、私は日、月、年のために別々の列を作るために必要とするか、またはiを1として にそれらを格納することができません:次のように は、このボタンをonClickリスナーを設定しますか?

私は、これはdate TEXTと呼ばれる列を作成することで、代わりにinsertDataメソッドにString day,String month,String yearを渡すので、私は唯一合格するDB に1列に日付、あるいは日付と時間を節約するために行くだろう次のように作成された1つの文字列の日付:

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

これを列の日付に保存します。

また、決済ボタンなしでdatepickerを使用することもできます。 ユーザーにとっては無効なUXである可能性があるので、これはお勧めできません。私はあなたのinsertDataが正常に動作する必要があり、あなたが持っている場合は、常に新しい質問を投稿することができていることがわかり

What am I missing? 

+0

@KostasKoustoulidisこれで問題は解決しますか?はい、答えが –

+0

です。私が誰かを投稿したときに私の投稿を編集し、それを見た人々が私が何を求めているのか理解できなかったからです。 –

+0

それをもう一度編集すれば、私はあなたを助けようとします! –

関連する問題