2013-07-19 2 views
0

데이터베이스를 만들고 해당 데이터베이스에서 CRUD 작업을 수행하려고합니다. 어떻게 든 삽입하고 선택하려고하면 다음 오류가 발생합니다.데이터베이스가 생성되지 않습니다.

07-19 08:26:21.880: E/AndroidRuntime(2740): FATAL EXCEPTION: main 
07-19 08:26:21.880: E/AndroidRuntime(2740): java.lang.ClassCastException: com.example.testdb.MainActivity$Select cannot be cast to java.lang.CharSequence 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at com.example.testdb.MainActivity$2.onClick(MainActivity.java:47) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.view.View.performClick(View.java:4204) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.view.View$PerformClick.run(View.java:17355) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.os.Handler.handleCallback(Handler.java:725) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.os.Looper.loop(Looper.java:137) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-19 08:26:21.880: E/AndroidRuntime(2740):  at dalvik.system.NativeStart.main(Native Method) 

그래서 코드를 테스트 할 별도의 프로젝트를 만들려고했습니다. 레코드를 삽입하는 두 개의 간단한 단추와 TextView에서 검색 한 레코드를 보여주는 단추가 있습니다. 삽입물이 발견되면, (나는 희망한다) 그러나 위의 오류가 표시되고 응용 프로그램이 충돌하는 데이터를 검색하기 위해 단추를 클릭하면 바란다.

다음

내 코드입니다 :

public class MainActivity extends Activity 
{ 
static DatabaseImplementation di; 
static SQLiteDatabase db; 

Button btnInsert; 
Button btnShow; 
TextView txtView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    di = new DatabaseImplementation(this); 
    db = di.getWritableDatabase(); 

    btnInsert = (Button)findViewById(R.id.btnInsert); 
    btnInsert.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      new Insert().execute(""); 
     } 
    }); 

    btnShow = (Button)findViewById(R.id.btnShow); 
    btnShow.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      AsyncTask<String, Void, String> result = new Select().execute(""); 
      txtView = (TextView)findViewById(R.id.txtView); 
      txtView.setText((CharSequence) result); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 


private static class Insert extends AsyncTask<String, Void, String> 
{  
    @Override 
    protected String doInBackground(String... params) 
    { 
     try 
     {  
      executeInsert(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

private static String executeInsert() 
{ 
    return "INSERT INTO tbl_Test VALUES(1, 'Testing');"; 
} 

private static class Select extends AsyncTask<String, Void, String> 
{ 
    @Override 
    protected String doInBackground(String... params) 
    { 
     try 
     { 
      String result = executeSelect(); 
      return result; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

private static String executeSelect() 
{ 
    return "SELECT test FROM tbl_Test WHERE _id = 1;"; 
} 

}

그리고 이것은 내 .XML이다 : 그러나 만약,

<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=".MainActivity" > 


<Button 
    android:id="@+id/btnInsert" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:text="Insert"/> 

<Button 
    android:id="@+id/btnShow" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/btnInsert" 
    android:text="Show"/> 

<TextView 
    android:id="@+id/txtView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/btnInsert" 
    android:text=""/> 

</RelativeLayout> 

나는 데이터베이스가 생성되지 않는 것으로 의심하고 있습니다 삽입 버튼을 누르 자마자 앱이 충돌하는 것보다 훨씬 낫습니다. 문제가 뭔지 알 겠어?

수정 :

죄송합니다. 32 : 05.580 : E는/AndroidRuntime (9498) : 치명적인 예외 : 07-19 09 @sirackh

public class DatabaseImplementation extends SQLiteOpenHelper 
{ 
private final String createTable = "CREATE TABLE tbl_Test (_id INTEGER PRIMARY KEY, test TEXT)"; 

public DatabaseImplementation(Context context) 
{ 
    super(context, "databaseName", null, 1); 

} 

@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    db.execSQL(createTable); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 


} 

}

: 나는 SQLIteOpenHelper 클래스를 추가하는 것을 잊었다 주요 07-19 9시 32분 : 05.580 : E/AndroidRuntime (9498) : java.lang.NullPointerException 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.database.sqlite.SQLiteProgram (SQLiteProgram.java:43) 07 -19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android에서 .database.sqlite.SQLi teDirectCursorDriver.query (SQLiteDirectCursorDriver.java:44) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1314) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1253) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : com.example. testdb.MainActivity $ Select.onPostExecute (MainActivity.java:115) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : com.example.testdb.MainActivity $ Select.onPostExecute (MainActivity.java:1) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.os.AsyncTask.finish (AsyncTask.java:631) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : at android.os.AsyncTask.access $ 600 (AsyncTask.java:177) 07-1 9 : 32 : 05.580 : E/AndroidRuntime (9498) : android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:644) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android .os.Handler.dispatchMessage (Handler.java:99) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.os.Looper.loop (Looper.java:137) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : android.app.ActivityThread.main (ActivityThread.java:5041) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : java.lang.reflect .Method.invokeNative (네이티브 메소드) 07-19 09 : 32 : 05.580 : E/AndroidRuntime (9498) : java.lang.reflect.Method.invoke (Method.java:511)에서 07-19 09:32 : 05.580 : E/AndroidRuntime (9498) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 07-19 09 : 32 : 05.580 : E/AndroidRuntime 9498) : at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 9월 7일부터 19일까지 : 32 : 05.580 : E/AndroidRuntime (9498) dalvik.system.NativeStart.main (자국어 법)

답변

0

TextView에 결과를 표시하려면 AsyncTask 클래스의 postExecute에서 수행해야합니다. 그래서이 방법을 구현하고 거기에 값을 설정하십시오.

protected void onPostExecute(String result) { 
    txtView = (TextView)findViewById(R.id.txtView); 
    txtView.setText(result); 
} 
+0

'Activity 유형에서 정적이 아닌 메소드 findViewById (int)에 정적 참조를 만들 수 없습니다.이 코드를 입력하면 주어진 오류입니다. – ClaireG

+0

@ClaireG AsyncTask 클래스에서 정적 식별자를 제거합니다. – sirackh

+0

감사합니다. 나는 아직도 onPostExecute()에서 NullPointerException을 받고있다 – ClaireG

0

은 이것에 오류를 범 라인 : 자동 CharSequenceAsyncTask 캐스팅 할 수

txtView.setText((CharSequence) result); 

때문입니다.

txtView.setText(result.toString()); 
+0

감사합니다. sandrstar. 그것은 logcat에서 제공된 오류를 해결했지만 여전히 작동하지 않습니다. – ClaireG

관련 문제