데이터베이스를 만들고 해당 데이터베이스에서 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 (자국어 법)
'Activity 유형에서 정적이 아닌 메소드 findViewById (int)에 정적 참조를 만들 수 없습니다.이 코드를 입력하면 주어진 오류입니다. – ClaireG
@ClaireG AsyncTask 클래스에서 정적 식별자를 제거합니다. – sirackh
감사합니다. 나는 아직도 onPostExecute()에서 NullPointerException을 받고있다 – ClaireG