我正在努力使用CAMERA2 API和SQLite。捕获视频后,剪辑名称必须保存在数据库中。这些是我想要弄清楚的步骤。
1.在视频捕获类中,将调用db活动类
VS_dbActivity dbActivity = new VS_dbActivity();
String msg = dbActivity.sendData(mNextVideoAbsolutePath);
2.在尝试将mNextVideoAbsolutePath
发送到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
}
}
在上面提到的类中,我没有添加构造函数。是否有必要添加构造函数?如果不使用构造函数会发生什么。
当我运行此应用时,它会在
中显示错误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 :(得分:2)
如果某些内容不是活动,请不要延长活动!
您可以将有效的Context传递给此方法或类的构造函数。不要只是思考"我需要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)
来正确获取上下文
或者,您可以将sendData方法移动到已经是您的SqliteOpenHelper的VS_dbConfig类中。没有理由将数据库助手隐藏在另一个
之后