0

以下のアクティビティでは、ユーザーは定義されたフィールドに入力する必要があります。エントリが作成されると、ユーザーは変更を編集して保存できます。ただし、私のアプリではエントリがデータベースに正常に挿入されていますが、同じフィールドを編集しているときに、website_1 列が存在しないという不正な引数の例外が発生しますが、列が存在するデータベースをチェックインしました。よろしくお願いします

注: populateFields は、エラーが発生しているメソッドです。アクティビティが開始されると、 populateField メソッドが呼び出されてフィールドに入力されます。

public class Newform_Screen2_Likewebsite_edit extends Activity {
    EditText w1,c1,w2,c2,w3,c3;
    Button btn_save;
    private String srowId;
    DBAdapter dba;
    SQLiteDatabase myDB;
    private Context context;    



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.newform_screen2_websites);


        dba=new DBAdapter(this);
        context=Newform_Screen2_Likewebsite_edit.this;
        final Intent intent = getIntent();
        srowId=intent.getStringExtra("KEYROWID");

        myDB=DBAdapter.openDatabase(context, DBAdapter.DATABASE_NAME);

        w1=(EditText)findViewById(R.id.www1_web_id);
        w2=(EditText)findViewById(R.id.www2_web_id);
        w3=(EditText)findViewById(R.id.www3_web_id);
        c1=(EditText)findViewById(R.id.color1_id);
        c2=(EditText)findViewById(R.id.color2_id);
        c3=(EditText)findViewById(R.id.color3_id);
        btn_save=(Button)findViewById(R.id.btn_save_web);


          populateFields();



        btn_save.setOnClickListener(new OnClickListener(){


            public void onClick(View v) {
                n2();
                n1();


            }

            private void n2() {

       dba = new DBAdapter(Newform_Screen2_Likewebsite_edit.this);


                   String s1=w1.getText().toString();
                   String s2=w2.getText().toString();
                   String s3=w3.getText().toString();
                   String s4=c1.getText().toString();
                   String s5=c2.getText().toString();
                   String s6=c3.getText().toString();

                String updatequery  = "UPDATE "+ DBAdapter.DATABASE_TABLE+ " SET ";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_1+" = '" + s1 +"',";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_2+" = '" + s2 + "',";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_3+" = '" + s3 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_1+" = '" + s4 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_2+" = '" + s5 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_3+" = '"+s6+"'";
                updatequery = updatequery + " WHERE _id = '" + srowId + "';";
                Log.v("updatequery-new-likewebsite-edit",updatequery);

                try{

                    Log.v("test-2","update");
                    dba.open();
                    myDB.execSQL(updatequery);

                }catch(NullPointerException e){

                    e.getMessage();
                }finally{
                    Log.v("test-3","update");

                    if(myDB != null)myDB.close();
                    dba.close();
                }

            }

            private void Log(String string) {
                Log.i("Activity-check",""+string);

            }


            private void n1() {

                Intent I = new Intent(Newform_Screen2_Likewebsite_edit.this,Newform_Screen2_edit.class);
                I.putExtra("rowid", srowId);
                startActivity(I);

            }

        });


    }


    private void populateFields() {
        dba.open();


         if (srowId != null) {
             Log.v("rowid",srowId.toString());
             long mRowId=Long.parseLong(srowId);
                Cursor cur = dba.fetchSaleseditdetails(mRowId);
                startManagingCursor(cur);
                try{

                    Log.v("test populate","test populate");

                w1.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_1)));
                w2.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_2)));
                w3.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_3)));
                c1 .setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_1)));
                c2.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_2)));
                c3.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_3)));

                }
                catch(Exception e){
                    e.printStackTrace();
                }

            }
        dba.close();
    }


    protected void onDestroy() {
        super.onDestroy();
        if (dba != null) {
            dba.close();
        }
        if (myDB != null) {
            myDB.close();
        }
    }


}

Logcat ファイル

   02-22 10:49:29.717: W/System.err(20723): java.lang.IllegalArgumentException: column 'website_1' does not exist
02-22 10:49:29.717: W/System.err(20723):    at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:302)
02-22 10:49:29.717: W/System.err(20723):    at com.example.exa_sales_new.Newform_Screen2_Likewebsite_edit.populateFields(Newform_Screen2_Likewebsite_edit.java:135)
02-22 10:49:29.717: W/System.err(20723):    at com.example.exa_sales_new.Newform_Screen2_Likewebsite_edit.onCreate(Newform_Screen2_Likewebsite_edit.java:48)
02-22 10:49:29.717: W/System.err(20723):    at android.app.Activity.performCreate(Activity.java:5008)
02-22 10:49:29.717: W/System.err(20723):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-22 10:49:29.717: W/System.err(20723):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 10:49:29.717: W/System.err(20723):    at android.os.Looper.loop(Looper.java:137)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.main(ActivityThread.java:4745)
02-22 10:49:29.717: W/System.err(20723):    at java.lang.reflect.Method.invokeNative(Native Method)
02-22 10:49:29.717: W/System.err(20723):    at java.lang.reflect.Method.invoke(Method.java:511)
02-22 10:49:29.717: W/System.err(20723):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-22 10:49:29.717: W/System.err(20723):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-22 10:49:29.717: W/System.err(20723):    at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0
  • 列にアクセスするために呼び出していると思いますがpopulateFields();、テーブルはまだ作成されていません。そのため、「列'website_1'は存在しません」という例外が発生します。

  • データベースを管理するためにSQLiteOpenHelperクラスを確認することを強くお勧めします。データベースのスキーマをいつ作成するか、いつアップグレードするかを内部的に処理します。

これは、データベースをアップグレードする方法や、alterqueryを実行する方法についてのアイデアを提供するサンプル例です。

public class OpenHelper extends SQLiteOpenHelper {

    private final static int DB_VERSION = 2;

    public TracksDB(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        final String CREATE_TBL =
            "create table " + ANIMALS_TABLE +
            " (_id integer primary key autoincrement, " + 
            "animal_name text not null, " +
            "biography text not null);";
             db.execSQL(CREATE_TBL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion < 2) {
            final String ALTER_TBL = 
                "ALTER TABLE " + ANIMALS_TABLE +
                " ADD COLUMN biography text not null;";
            db.execSQL(ALTER_TBL);
        }
    }
} 

データベースのアップグレードの詳細については、このリンクを参照してください。

ノート :

  • onCreate()初めてアプリをインストールする場合にonUpgrade()のみ電話をかけ、アプリがすでにインストールされていて更新する場合にのみ電話をかけます。

これがあなたの問題を解決するのに役立つことを願っています。

于 2013-02-22T06:58:54.877 に答える