2017-09-21 8 views
-3

私はCAMERA2 APIとSQLiteに苦しんでいます。ビデオがキャプチャされた後、クリップ名はdbに保存されなければなりません。これは私が把握しようとしているステップです。ビデオキャプチャクラス1.In仮想メソッドを呼び出そうとすると、SQLite

、dbActivityクラスはデシベル

public class VS_dbActivity extends AppCompatActivity{ 

private VS_dbConfig dbHelp; 

public String sendData(String filePath) { 
    dbHelp = new VS_dbConfig(this); 
    SQLiteDatabase db = dbHelp.getWritableDatabase(); 
    // some example 
} 

}

mNextVideoAbsolutePathを送信しようと2.Inデシベル活動クラス

VS_dbActivity dbActivity = new VS_dbActivity(); 
    String msg = dbActivity.sendData(mNextVideoAbsolutePath); 

のために呼び出します。上記のクラスでは、コンストラクタを追加しませんでした。コンストラクタを追加する必要がありますか?コンストラクタを使用しなかった場合はどうなりますか?私は

SQLiteDatabase db = dbHelp.getWritableDatabase(); 

エラー・ログには、エラー表示されます。このアプリを実行してい

:---- >>

FATAL EXCEPTION: main 
                       Process: com.android.ejsoft.video_upload_000web, PID: 334 
                       java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference 
                        at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:274) 
                        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 
                        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
                        at com.android.ejsoft.video_upload_000web.dbManage.VS_dbActivity.sendData(VS_dbActivity.java:28) 
                        at com.android.ejsoft.video_upload_000web.Camera2VideoFragment.sendFilePath(Camera2VideoFragment.java:578) 
                        at com.android.ejsoft.video_upload_000web.Camera2VideoFragment.access$1200(Camera2VideoFragment.java:60) 
                        at com.android.ejsoft.video_upload_000web.Camera2VideoFragment$4$2.onInfo(Camera2VideoFragment.java:555) 
                        at android.media.MediaRecorder$EventHandler.handleMessage(MediaRecorder.java:1159) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5753) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

は、取得するために、コンストラクタを実行せずに、とにかくそこではないです活動の文脈?貴重な時間をありがとう。

+0

エラーログを置くことができますか? –

+0

エラーログ@ king_abu1918を追加しました –

+0

新しいアクティビティクラスを作成してメソッドを呼び出すことはできません。なぜあなたはそれが正しいと思いますか? –

答えて

2

何かがアクティビティでない場合は、アクティビティを延長しないでください!

有効なコンテキストをこのメソッドまたはクラスのコンストラクタに渡すことができます。 「文法にするにはthisが必要なので、私はそれをアクティビティにするだけです」と思ってはいけません。

public class VS_dbHelper { 

    private final VS_dbConfig dbHelp; 

    public VS_dbHelper(Context c) { 
     dbHelp = new VS_dbConfig(c); 
    } 

    public String sendData(String filePath) { 
     // For example 
     SQLiteDatabase db = dbHelp.getWritableDatabase(); 
    } 

そして、あなたが今また正しく

コンテキストを取得するためnew VS_dbHelper(MainActivity.this)を必要とする、あなたはすでにあなたのSqliteOpenHelperあるVS_dbConfigクラスにSendDataメソッドを移動することができ、それはそうです。あなたのデータベースヘルパーを別のものの背後に隠す理由はありません

関連する問題