2012-03-05 22 views
-2

別のクラスのメソッドを呼び出そうとしましたが、同じパッケージにありますが、私の電話でテストすると強制的に閉じます。以下別の.javaファイル内の他のクラスのメソッドを呼び出す

基本的に私はsqliteの、LocalSQLiteクラスのオブジェクトを作成し、sqlite.methodを(使用) は私のコードです:

Sqlitetest2Activity.java

package com.test.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Sqlitetest2Activity extends Activity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LocalSQLite sqlite = new LocalSQLite(); 
    sqlite.createTable();   
    } 
} 

LocalSQLite.java

package com.test.test; 

import android.app.Activity; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.widget.Toast; 

public class LocalSQLite extends Activity { 
    SQLiteDatabase mydb; 
    private static String DBNAME = "city.db"; // SQLITE DATABASE FILE NAME. 
    private static String TABLE = "citytable";  // TABLE NAME 

/* CREATE TABLE IF NOT EXISTS */ 
public void createTable(){ 
    try{ 
    mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
    mydb.execSQL("CREATE TABLE IF NOT EXISTS "+ TABLE +" (ID INTEGER PRIMARY KEY, CITY TEXT);"); 
    mydb.close(); 
    }catch(Exception e){ 
     Toast.makeText(getApplicationContext(), "Error in creating table", Toast.LENGTH_LONG); 
    } 
} 

/* DROPS TABLE */ 
public void dropTable(){ 
    try{ 
     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
     mydb.execSQL("DROP TABLE " + TABLE); 
     mydb.close(); 
    }catch(Exception e){ 
     Toast.makeText(getApplicationContext(), "Error encountered while dropping table.", Toast.LENGTH_LONG); 
    } 
} 

/* THIS FUNCTION INSERTS DATA TO THE DATABASE */ 
public void insertIntoTable(String city_id, String city_name){ 
    try{ 
     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
     mydb.execSQL("INSERT INTO " + TABLE + "(ID, CITY) VALUES('"+city_id+"','"+city_name+"')"); 
     mydb.close(); 
    }catch(Exception e){ 
     Toast.makeText(getApplicationContext(), "Error in inserting into table", Toast.LENGTH_LONG); 
    } 
} 
} 
+1

通常、「Forceclose」はlogcat stacktraceに準拠しています。このstackptraceを慎重にredingすることは、通常、何が起こったのかを理解することにつながり、コード内でweherが発生します。他の人が見ることができるようにこのスタックトレースを提供してください –

+0

@ user1249055:スタックトレースを提供しました。 –

答えて

2

アクティビティのクラスをインスタンス化することはできませんオブジェクト。メソッドを呼び出すには、 -

をstaticとし、LocalSQLite.createTable()を使用して呼び出します。

LocalSQLiteクラスで他の間違いがあります。関連する画面がない場合、アクティビティを拡張する必要はありません。だから、アクティビティを拡張するだけで、あなたの問題を解決するはずです! :-)

質問がありましたら教えてください。

0

...

Application Components

... Activitiesについて特にビットをこれをお読みください。 ActivityはJavaクラスであってもかまいませんが、それは「特別な」クラスであり、newを使用して決してインスタンス化すべきではありません。それだけでなく、それはUIを提供することを目的としたクラスであり、SQLiteの処理のためにそれを使用しようとする一般的なヘルパークラスではありません。

代わりにSQLiteOpenHelperを延長してください。

0

このようなアクティビティをインスタンス化することはできません。 LocalSQLiteがActivityを拡張しないようにしてください。正常に動作します。

0

あなたはAndroidで提供するSQLiteOpenHelperクラスを試しましたか?データベースの作成と更新を自動化し、作成してオブジェクト化して実行する必要はありません。

それは言われています...それはエラーを引き起こしているテキストかもしれません、私はあなたが望むと思いますVARCHARです。

関連する問題