2017-09-21 4 views
-3

Ich habe Probleme mit CAMERA2 API und SQLite. Nach dem aufgenommenen Video muss der Clip-Name in der db gespeichert werden. Das sind die Schritte, die ich versuche herauszufinden.Versuch, virtuelle Methode aufzurufen: SQLite

1.In der Videoaufnahme-Klasse wird für die db Aktivitäten Klasse aufrufen

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

2.In der dbActivity Klasse versucht mNextVideoAbsolutePath in db

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 
} 

}

zu senden In der oben genannten Klasse habe ich den Konstruktor nicht hinzugefügt. Ist es notwendig, Konstruktor hinzuzufügen? Was passiert, wenn der Konstruktor nicht verwendet wurde?

Wenn ich diese App laufen bin es Fehler in

SQLiteDatabase db = dbHelp.getWritableDatabase(); 

Fehlerprotokoll angezeigt wird: ---- >>

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) 

Gibt es ohnehin nicht ohne Konstruktor zu tun das für immer Kontext der Aktivität? Danke für deine wertvolle Zeit.

+0

Können Sie das Fehlerprotokoll setzen? –

+0

Ich habe Fehlerprotokoll @ king_abu1918 hinzugefügt –

+0

Sie können nicht einfach eine neue Aktivitätsklasse erstellen und Methoden aufrufen. Warum denkst du das ist richtig? –

Antwort

2

Wenn etwas keine Aktivität ist, erweitern Sie keine Aktivität!

Sie können einen gültigen Kontext in diese Methode oder einen Konstruktor der Klasse übergeben. Denke nicht einfach "Ich brauche this um ein Kontext zu sein, also werde ich es einfach zu einer Aktivität machen".

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(); 
    } 

Und Sie brauchen jetzt new VS_dbHelper(MainActivity.this) für das Erhalten der Kontext richtig

Alternativ können Sie die Senddata-Methode in die VS_dbConfig Klasse bewegen, die bereits Ihre SqliteOpenHelper ist, so scheint es. Es gibt keinen Grund, Ihren Datenbankhelfer hinter einem anderen zu verstecken

Verwandte Themen