내 응용 프로그램에 도움이 필요합니다. 텍스트 필드에 값을 저장하려고 할 때마다 버튼이 저장된 후 응용 프로그램 충돌이 발생합니다. 다음과 같은 클래스를 만들었습니다 : 이것은 주 활동 클래스입니다 (이 경우에는 요일의 경우 요행처럼 활동을 전환하기 위해 TabHost가 있습니다).데이터베이스에 값 삽입 (응용 프로그램 강제 종료)
package com.projekt;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;
public class MainActivity extends TabActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//--- TABHOST ---//
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, PoniedzialekActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("Pn").setIndicator("Pn",
res.getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent = new Intent().setClass(this, WtorekActivity.class);
spec = tabHost.newTabSpec("Wt").setIndicator("Wt",
res.getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SrodaActivity.class);
spec = tabHost.newTabSpec("Sr").setIndicator("Sr",
res.getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, CzwartekActivity.class);
spec = tabHost.newTabSpec("Cz").setIndicator("Cz",
res.getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, PiatekActivity.class);
spec = tabHost.newTabSpec("Pt").setIndicator("Pt",
res.getDrawable(R.drawable.ic_launcher))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
//--- END OF TABHOST ---//
}
}
이 내 DatabaseHelper 클래스입니다 : 이것은 (I 버튼 클릭에 원하는 위치에 "추가"나는 데이터베이스에 값을 추가하고 새로운 의도 시작)
을 내 PoniedzialekActivity이package com.projekt;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public static final String TAG = "ProjectDatabase";
final static String PN_TABLE = "Tablica Poniedzialek";
static final String PN_KEY_ID = "_id";
final static String PN_KEY_NAME ="name";
final static String PN_KEY_TYPE_OF_SESSION ="type_of_session";
final static String PN_KEY_START_TIME ="start_time";
final static String PN_KEY_END_TIME ="end_time";
final static String PN_KEY_ROOM ="room";
static final String WT_TABLE = "Tablica Wtorek";
static final String WT_KEY_ID = "_id";
static final String WT_KEY_NAME ="name";
static final String WT_KEY_TYPE_OF_SESSION ="type_of_session";
static final String WT_KEY_START_TIME ="start_time";
static final String WT_KEY_END_TIME ="end_time";
static final String WT_KEY_ROOM ="room";
static final String SR_TABLE = "Tablica Sroda";
static final String SR_KEY_ID = "_id";
static final String SR_KEY_NAME ="name";
static final String SR_KEY_TYPE_OF_SESSION ="type_of_session";
static final String SR_KEY_START_TIME ="start_time";
static final String SR_KEY_END_TIME ="end_time";
static final String SR_KEY_ROOM ="room";
static final String CZ_TABLE = "Tablica Czwartek";
static final String CZ_KEY_ID = "_id";
static final String CZ_KEY_NAME ="name";
static final String CZ_KEY_TYPE_OF_SESSION ="type_of_session";
static final String CZ_KEY_START_TIME ="start_time";
static final String CZ_KEY_END_TIME ="end_time";
static final String CZ_KEY_ROOM ="room";
static final String PT_TABLE = "Tablica Piatek";
static final String PT_KEY_ID = "_id";
static final String PT_KEY_NAME ="name";
static final String PT_KEY_TYPE_OF_SESSION ="type_of_session";
static final String PT_KEY_START_TIME ="start_time";
static final String PT_KEY_END_TIME ="end_time";
static final String PT_KEY_ROOM ="room";
//--- KONSTRUKTOR ---//
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//--- POMOCNIK DO OTWIERANIA/AKTUALIZOWANIA BAZY DANYCH ---//
private DatabaseHelper dbhelper;
//--- ZMIENNA DO PRZECHOWYWANIA INSTANCJI BAZY DANYCH ---//
@SuppressWarnings("unused")
private SQLiteDatabase db;
//--- TWORZENIE TABLIC ---//
@Override
public void onCreate(SQLiteDatabase db) {
String pn_sql = "CREATE TABLE" + PN_TABLE +
"(PN_KEY_ID integer primary key autoincrement, " +
"PN_KEY_TYPE_OF_SESSION text, " +
"PN_KEY_NAME text, " +
"PN_KEY_START_TIME text, " +
"PN_KEY_END_TIME text, " +
"PN_KEY_ROOM text);";
String wt_sql = "CREATE TABLE" + WT_TABLE +
"(WT_KEY_ID integer primary key autoincrement, " +
"WT_KEY_TYPE_OF_SESSION text, " +
"WT_KEY_NAME text, " +
"WT_KEY_START_TIME text, " +
"WT_KEY_END_TIME text, " +
"WT_KEY_ROOM text);";
String sr_sql = "CREATE TABLE" + SR_TABLE +
"(SR_KEY_ID integer primary key autoincrement, " +
"SR_KEY_TYPE_OF_SESSION text, " +
"SR_KEY_NAME text, " +
"SR_KEY_START_TIME text, " +
"SR_KEY_END_TIME text, " +
"SR_KEY_ROOM text);";
String cz_sql = "CREATE TABLE" + CZ_TABLE +
"(CZ_KEY_ID integer primary key autoincrement, " +
"CZ_KEY_TYPE_OF_SESSION text, " +
"CZ_KEY_NAME text, " +
"CZ_KEY_START_TIME text, " +
"CZ_KEY_END_TIME text, " +
"CZ_KEY_ROOM text);";
String pt_sql = "CREATE TABLE" + PT_TABLE +
"(PT_KEY_ID integer primary key autoincrement, " +
"PT_KEY_TYPE_OF_SESSION text, " +
"PT_KEY_NAME text, " +
"PT_KEY_START_TIME text, " +
"PT_KEY_END_TIME text, " +
"PT_KEY_ROOM text);";
db.execSQL(pn_sql);
db.execSQL(wt_sql);
db.execSQL(sr_sql);
db.execSQL(cz_sql);
db.execSQL(pt_sql);
}
@Override
//--- ON UPGRADE ---//
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("Projekt", "aktualizacja z wersji " + oldVersion
+ " do wersji " + newVersion + " (stare dane ulegna usunieciu) ");
db.execSQL("DROP TABLE IF EXISTS" + PN_TABLE);
db.execSQL("DROP TABLE IF EXISTS" + WT_TABLE);
db.execSQL("DROP TABLE IF EXISTS" + SR_TABLE);
db.execSQL("DROP TABLE IF EXISTS" + CZ_TABLE);
db.execSQL("DROP TABLE IF EXISTS" + PT_TABLE);
onCreate(db);
}
//--- OPEN DATABASE ---//
public void open() throws SQLiteException
{
try
{
db = dbhelper.getWritableDatabase();
}
catch(SQLiteException ex)
{
db = dbhelper.getReadableDatabase();
}
}
//--- CLOSE DATABASE ---//
public void close()
{
dbhelper.close();
}
} //--- KONIEC KLASY DatabaseHelper ---//
입니다
package com.projekt;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class PoniedzialekActivity extends Activity implements OnClickListener {
private Button butPnAdd;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_poniedzialek);
butPnAdd = (Button) findViewById(R.id.butPnAdd);
butPnAdd.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.butPnAdd){
Intent i = new Intent(PoniedzialekActivity.this,dodawaniePoniedzialek.class);
startActivity(i);
}
}
}
그리고 이것은 단순히 데이터베이스
값을 추가 내 dodawanieActivity입니다이 (데이터베이스에 추가 값을 사용) 내 Poniedzialek 클래스
package com.projekt;
public class Poniedzialek {
//private variables
int id;
String name;
String start_time;
String end_time;
String type_of_session;
String room;
// pusty constructor
public Poniedzialek(){
}
// constructor
public Poniedzialek(int id, String name,String start_time,String end_time,String type_of_session,String room){
this.id = id;
this.type_of_session = type_of_session;
this.name = name;
this.start_time = start_time;
this.end_time = end_time;
this.room = room;
}
// getting ID
public int getID(){
return this.id;
}
// setting id
public void setID(int id){
this.id = id;
}
// getting name
public String getName(){
return this.name;
}
// setting name
public void setName(String name){
this.name = name;
}
// getting start time
public String getStartTime(){
return this.start_time;
}
// setting start time
public void setStartTime(String start_time){
this.start_time = start_time;
}
// getting end time
public String getEndTime(){
return this.end_time;
}
// setting end time
public void setEndTime(String end_time){
this.end_time = end_time;
}
// getting type of session
public String getTypeOfSession(){
return this.type_of_session;
}
// setting type of session
public void setTypeOfSession(String type_of_session){
this.type_of_session = type_of_session;
}
// getting room
public String getRoom(){
return this.room;
}
// setting room
public void setRoom(String room){
this.room = room;
}
}
그리고 그런데
, 누군가가 내가 PoniedzialekActivity 출시 (또는 스위치, 몰라)에 표시 할 수있는 방법을 말해 줄 수 값을 표시입니다 데이터베이스에 일찍 넣는다.06-11 13:08:49.104: D/PhoneWindow(331): couldn't save which view has focus because the focused view [email protected] has no id.
06-11 13:08:50.784: I/Database(331): sqlite returned: error code = 1, msg = near "TABLETablica_Poniedzialek": syntax error
06-11 13:08:50.784: E/Database(331): Failure 1 (near "TABLETablica_Poniedzialek": syntax error) on 0x2da910 when preparing 'CREATE TABLETablica_Poniedzialek(PN_KEY_ID integer primary key autoincrement, PN_KEY_TYPE_OF_SESSION text, PN_KEY_NAME text, PN_KEY_START_TIME text, PN_KEY_END_TIME text, PN_KEY_ROOM text);'.
06-11 13:08:50.804: D/AndroidRuntime(331): Shutting down VM
06-11 13:08:50.804: W/dalvikvm(331): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-11 13:08:50.815: E/AndroidRuntime(331): FATAL EXCEPTION: main
06-11 13:08:50.815: E/AndroidRuntime(331): android.database.sqlite.SQLiteException: near "TABLETablica_Poniedzialek": syntax error: CREATE TABLETablica_Poniedzialek(PN_KEY_ID integer primary key autoincrement, PN_KEY_TYPE_OF_SESSION text, PN_KEY_NAME text, PN_KEY_START_TIME text, PN_KEY_END_TIME text, PN_KEY_ROOM text);
06-11 13:08:50.815: E/AndroidRuntime(331): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
06-11 13:08:50.815: E/AndroidRuntime(331): at com.projekt.DatabaseHelper.onCreate(DatabaseHelper.java:117)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
06-11 13:08:50.815: E/AndroidRuntime(331): at com.projekt.dodawaniePoniedzialek.addPnSession(dodawaniePoniedzialek.java:79)
06-11 13:08:50.815: E/AndroidRuntime(331): at com.projekt.dodawaniePoniedzialek.onClick(dodawaniePoniedzialek.java:69)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.view.View.performClick(View.java:2485)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.view.View$PerformClick.run(View.java:9080)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.os.Handler.handleCallback(Handler.java:587)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.os.Handler.dispatchMessage(Handler.java:92)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.os.Looper.loop(Looper.java:123)
06-11 13:08:50.815: E/AndroidRuntime(331): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-11 13:08:50.815: E/AndroidRuntime(331): at java.lang.reflect.Method.invokeNative(Native Method)
06-11 13:08:50.815: E/AndroidRuntime(331): at java.lang.reflect.Method.invoke(Method.java:507)
06-11 13:08:50.815: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-11 13:08:50.815: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-11 13:08:50.815: E/AndroidRuntime(331): at dalvik.system.NativeStart.main(Native Method)
마지막 것은, 내가 내 PoniedzialekActivity에 데이터베이스에 넣어 값을 표시하고 작업을 얻을 수 없다 당신은 내가에 무엇을해야하는지 말해 줄 수 :
요청에,이 로그 말한 이게 효과가 있니? 나는 막 다른 골목에있다. (이것은 내가 atm에서 일하기를 원하는 마지막 일이다.) 나는 그런 일을 시도했다. 도와주세요.
package com.projekt;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
public class PoniedzialekActivity extends ListActivity implements OnClickListener { // now Extends ListActivity instead of Activity
/* ADDED */
private DatabaseHelper dbhelper;
private SQLiteDatabase db;
/* DEDDA */
private Button butPnAdd;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_poniedzialek);
butPnAdd = (Button) findViewById(R.id.butPnAdd);
butPnAdd.setOnClickListener(this);
List<Poniedzialek> values = showPn();
// Use the SimpleCursorAdapter to show the
// elements in a ListView
ArrayAdapter<Poniedzialek> pn_adapter = new ArrayAdapter<Poniedzialek>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(pn_adapter);
}
/* ADDED */
public List<Poniedzialek> showPn(){
List<Poniedzialek> pn_list = new ArrayList<Poniedzialek>();
Cursor cursor = db.query(DatabaseHelper.PN_TABLE, null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Poniedzialek pn = cursorToPoniedzialek(cursor);
pn_list.add(pn);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return pn_list;
}
private Poniedzialek cursorToPoniedzialek(Cursor cursor) {
Poniedzialek pn = new Poniedzialek();
pn.setID(cursor.getInt(0));
pn.setStartTime(cursor.getString(1));
pn.setEndTime(cursor.getString(2));
pn.setTypeOfSession(cursor.getString(3));
pn.setName(cursor.getString(4));
pn.setRoom(cursor.getString(5));
return pn;
}
/* DEDDA */
@Override
public void onClick(View v) {
if(v.getId()==R.id.butPnAdd){
Intent i = new Intent(PoniedzialekActivity.this,dodawaniePoniedzialek.class);
startActivity(i);
}
}
}
LogCat은 무엇이라고 말합니까? – Nikhil
코드가 모호합니다. 게시하십시오 Logcat –