2014-09-30 77 views
1

我想製作一個應用程序,可以收集人員的信息並添加到數據庫中。但是我在將選定的單選按鈕值插入數據庫時​​遇到了一些問題。將單選按鈕值插入到數據庫中

public class MainActivity extends Activity { 
    SQLiteDatabase pf; 

    TableRow tablerow; 
    TextView t,t1,t2,t3,t4,t5;  
    String first_name,last_name; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    pf=openOrCreateDatabase("Profile",MODE_PRIVATE,null); 
    pf.execSQL("CREATE TABLE IF NOT EXISTS Persone(first_name VARCHAR,last_name VARCHAR,Usergender VARCHAR);"); 
} 

public void RadioButtonClicked(View view) { 

    //This variable will store whether the user was male or female 
    String userGender=""; 
    // Check that the button is now checked? 
    boolean checked = ((RadioButton) view).isChecked(); 

    // Check which radio button was clicked 
    switch(view.getId()) { 
     case R.id.radio_female: 
      if (checked) 
       userGender = "female"; 
      break; 
     case R.id.radio_male: 
      if (checked) 
       userGender = "male"; 
      break; 
    } 
    pf.execSQL("INSER INTO Persone VALUES('"+userGender+"');"); 
} 

public void add(View view){ 
    EditText fn = (EditText)findViewById(R.id.first_name); 
    EditText ln = (EditText)findViewById(R.id.last_name); 

    first_name=fn.getText().toString(); 
    last_name =ln.getText().toString(); 

    pf.execSQL("INSERT INTO Persone VALUES('"+first_name+"','"+last_name+"');"); 
} 



public void show(View view){ 
    Cursor c = pf.rawQuery("SELECT * FROM Persone", null); 
    int count = c.getCount(); 
    c.moveToFirst(); 
    TableLayout tablelayout = new TableLayout(getApplicationContext()); 
    tablelayout.setVerticalScrollBarEnabled(true); 
    TableRow tablerow; 
    TextView t,t1,t2,t3,t4,t5; 
    tablerow = new TableRow(getApplicationContext()); 

    t = new TextView(getApplicationContext()); 
    t.setText("First Name"); 
    t.setTextColor(Color.RED); 
    t.setTypeface(null,Typeface.BOLD); 
    t.setPadding(20,20,20,20); 
    tablerow.addView(t); 

    t3 = new TextView(getApplicationContext()); 
    t3.setText("Last Name"); 
    t3.setTextColor(Color.RED); 
    t3.setTypeface(null,Typeface.BOLD); 
    t3.setPadding(20,20,20,20); 
    tablerow.addView(t3); 

    t4 = new TextView(getApplicationContext()); 
    t4.setText("Gender"); 
    t4.setTextColor(Color.RED); 
    t4.setTypeface(null,Typeface.BOLD); 
    t4.setPadding(20,20,20,20); 
    tablerow.addView(t4); 

    tablelayout.addView(tablerow); 
    for(Integer j = 0;j<count;j++) 
    { 
     tablerow = new TableRow(getApplicationContext()); 

     t1 = new TextView(getApplicationContext()); 
     t1.setText(c.getString(c.getColumnIndex("first_name"))); 
     t1.setPadding(20, 20, 20, 20); 


     t2 = new TextView(getApplicationContext()); 
     t2.setText(c.getString(c.getColumnIndex("last_name"))); 
     t2.setPadding(20, 20, 20, 20); 

     t5 = new TextView(getApplicationContext()); 
     t5.setText(c.getString(c.getColumnIndex("userGender"))); 
     t5.setPadding(20, 20, 20, 20); 



     tablerow.addView(t1); 
     tablerow.addView(t2); 
     tablerow.addView(t5); 


     tablelayout.addView(tablerow); 

     c.moveToNext(); 
    } 
    setContentView(tablelayout); 
    pf.close(); 
} 


<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.mythirdapp.MainActivity" > 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView1" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="14dp" 
     android:text="@string/last_name" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/first_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textView1" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_alignParentRight="true" 
     android:layout_toRightOf="@+id/textView1" 
     android:ems="10" 
     android:inputType="textPersonName" > 

     <requestFocus android:layout_width="match_parent" /> 

    </EditText> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="14dp" 
     android:text="@string/first_name" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="16dp" 
     android:onClick="add" 
     android:text="@string/add" /> 

    <Button 
     android:id="@+id/Button01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/button1" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_alignRight="@+id/last_name" 
     android:onClick="show" 
     android:text="@string/show" /> 

    <EditText 
     android:id="@+id/last_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/first_name" 
     android:layout_below="@+id/textView1" 
     android:ems="10" 
     android:inputType="textPersonName" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView2" 
     android:layout_below="@+id/last_name" 
     android:layout_marginTop="14dp" 
     android:text="@string/gender" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <RadioGroup 
     android:id="@+id/radio_gender" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_alignRight="@+id/Button01" 
     android:layout_alignTop="@+id/textView3" 
     android:layout_toRightOf="@+id/button1" > 

     <RadioButton 
      android:id="@+id/radio_female" 
      android:text="@string/radio_female" 
      android:onClick="RadioButtonClicked" /> 

     <RadioButton 
      android:id="@+id/radio_male" 
      android:text="@string/radio_male" 
      android:onClick="RadioButtonClicked"/> 

    </RadioGroup> 

</RelativeLayout> 

我想選擇的單選按鈕的值,並將其添加到數據庫中。但是,當我運行Android模擬器和程序,它說:

不幸的是,MyThirdApp已經停止

誰能幫助我?

的logcat:

10-02 06:36:51.319: E/SQLiteLog(1770): (1) near "INSER": syntax error 
10-02 06:36:51.399: E/AndroidRuntime(1770): FATAL EXCEPTION: main 
10-02 06:36:51.399: E/AndroidRuntime(1770): Process: com.example.mythirdapp, PID: 1770 
10-02 06:36:51.399: E/AndroidRuntime(1770): java.lang.IllegalStateException: Could not execute method of the activity 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.view.View$1.onClick(View.java:3823) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.view.View.performClick(View.java:4438) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.widget.CompoundButton.performClick(CompoundButton.java:100) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.view.View$PerformClick.run(View.java:18422) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.os.Handler.handleCallback(Handler.java:733) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.os.Handler.dispatchMessage(Handler.java:95) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.os.Looper.loop(Looper.java:136) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at dalvik.system.NativeStart.main(Native Method) 
10-02 06:36:51.399: E/AndroidRuntime(1770): Caused by: java.lang.reflect.InvocationTargetException 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.view.View$1.onClick(View.java:3818) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  ... 12 more 
10-02 06:36:51.399: E/AndroidRuntime(1770): Caused by: android.database.sqlite.SQLiteException: near "INSER": syntax error (code 1): , while compiling: INSER INTO Persone VALUES('female'); 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  at com.example.mythirdapp.MainActivity.RadioButtonClicked(MainActivity.java:56) 
10-02 06:36:51.399: E/AndroidRuntime(1770):  ... 15 more 

回答

0

您好不是問題:

首先添加:

android:onClick="RadioButtonClicked" > 

雙方你的男性和女性radioGroup中的子元素之下,像這樣:

android:id="@+id/radio_female" 
android:text="@string/radio_female" 
android:onClick="RadioButtonClicked" 

現在做到這一點,在你的MainActivity添加以下代碼:?

//Note the name of the method must match the xml onClick value in this case 'RadioButtonClicked' 

public void RadioButtonClicked(View view) { 

//This variable will store whether the user was male or female 
String userGender=""; 
// Check that the button is now checked? 
boolean checked = ((RadioButton) view).isChecked(); 

// Check which radio button was clicked 
switch(view.getId()) { 
    case R.id.radio_female: 
     if (checked) 
      userGender = "female"; 
     break; 
    case R.id.radio_male: 
     if (checked) 
      userGender = "male"; 
     break; 
} 

//Now insert it into your database using userGender instead of gender 

pf.execSQL....+userGender 

}

+0

哎,沒在計算機上工作,因爲我試過了,沒有工作,它說:「不幸的是,,是MYAPP停止「 – 2014-10-01 19:20:25

+0

這樣做的工作,並經過測試...如果您可以發送給我您的電子郵件我會發送給您的源代碼。請注意,我沒有插入到數據庫中,我只是記錄了結果。 – Jonny2Plates 2014-10-02 06:20:58

+0

請粘貼您的logcat輸出的錯誤 – Jonny2Plates 2014-10-02 06:21:35

相關問題