2016-08-17 16 views
-1

SQLiteOpenHelperクラスでDatabaseClassを拡張するときに、そのパラメータにContextを含むコンストラクタを実装する必要があります。私の他のクラスでこのデータベースを使用する必要がある場合、コンテキストが変更される可能性があります。私は別の文脈を提供するときにどのような変更が行われますか?SQLiteOpenHelperクラスのコンテキストとは何ですか?異なるクラスから異なるコンテキストを提供する場合は、

public class DatabaseClass extends SQLiteOpenHelper { 

static String TABLE_NAME = "hammad"; 
static String DATABASE_NAME = "databases.db"; 

SQLiteDatabase database; 

public DatabaseClass(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    Log.i("xcv", "Constructor called"); 
    this.database = this.getWritableDatabase(); 
} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    Log.i("xcv", "OnCreate"); 
    try { 
     sqLiteDatabase.execSQL("create table student (id integer primary key autoincrement,name varchar)"); 
     Log.i("xcv", "On Create query Table created"); 
    } catch (Exception ffff) { 
     Log.i("xcv", "2:"+ffff.getMessage()); 
    } 

} 

StartPage.java

public class StartPage extends AppCompatActivity { 

DatabaseClass database; 

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

    setLoginBtn(); // Set Login Btn 


    database=new DatabaseClass(this); 

    } 
} 

Class2.java

public class Class2 extends AppCompatActivity { 

    DatabaseClass database; 

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

     setLoginBtn(); // Set Login Btn 


     database=new DatabaseClass(this); 

    } 
} 
+0

'getApplicationContext()'も使用できます。それはどこでも同じである – tynn

答えて

1

はいコンテキストは、すべて変更されます...あなたは、この行について最初に明確にする必要があり、 "コンテキストを変更してもよいです"異なるクラスから呼び出すことによってデータベースの新しいインスタンスを作成し、それを変更する必要があります.Bcozコンテキストは、このアクティビティがデータベースにアクセスするためのパーミッションを持っているということです...だから、"this"のxyzアクティビティがあると、xyzはデータにアクセスし、データベース内のデータを変更するアクセス権を持っています...それは、リソースを制御する前にIDカードをデータベースに表示するようなものです....

また、コンテキストを渡すことによって、どのクラスからでもデータを取得したり、データを変更したり、接続を閉じることができます。

Scenario :家の中の同じような単一の冷蔵庫は、その中の何かを見ることしかできません。それを食べる...または何かに配置することができます...そして何かが家族のいずれかによって行うことができます... "this"または"context"は個人です

0

SQLiteOpenHelperは、渡されたContextを使用して、アプリケーションパッケージ(データベースファイルが保存されているプラ​​イベートデータディレクトリ)を検索します。パッケージは、アプリケーションのAndroidManifest.xmlで宣言されたpackageであり、クラスファイルのJavaパッケージではありません。

アプリケーション内のすべてContextは、同じパッケージ - プライベートデータディレクトリを持ち、データベースは有効なContextで正常に動作します。

+0

なので別のパッケージにデータベースクラスがあるのは、package-priivateデータディレクトリと同じですか? –

+0

これは、アプリケーションマニフェストファイル内のアプリケーションのパッケージであり、Javaクラスのjavaパッケージではありません。 – laalto

+0

Thankew Brother <3 :) –

関連する問題