Java NullPointerException错误,经验不足,不知道是什么';这是不对的
可能重复:Java NullPointerException错误,经验不足,不知道是什么';这是不对的,java,android,Java,Android,可能重复: 它们是什么?每当我试图将对象传递给我的数据库助手时,我的应用程序总是崩溃 变量名为“e”。我已经在toast通知中显示了对象中的数据,一切都很好,但是当我试图将其传递给数据库帮助器时,我什么也得不到。我甚至每第二行都添加了日志,但由于该方法从未启动,因此没有传递任何内容 我还尝试将对象中的值添加到单独的变量中并传递它们(我重写了helper方法),但它仍然崩溃 我差一点就要把笔记本电脑扔出窗外了,请帮帮我 我的占位符搜索类 package com.typhoon2099.media
它们是什么?每当我试图将对象传递给我的数据库助手时,我的应用程序总是崩溃 变量名为“e”。我已经在toast通知中显示了对象中的数据,一切都很好,但是当我试图将其传递给数据库帮助器时,我什么也得不到。我甚至每第二行都添加了日志,但由于该方法从未启动,因此没有传递任何内容 我还尝试将对象中的值添加到单独的变量中并传递它们(我重写了helper方法),但它仍然崩溃 我差一点就要把笔记本电脑扔出窗外了,请帮帮我 我的占位符搜索类
package com.typhoon2099.mediacatalogue;
//This class is used to query the details of the barcode scanned or entered
//This in done in lieu of an open online database
//If an online database is found this class can be replaced to utilise it
public class SearchForBarcode{
//Initialise Variables
public String barcode;
public String mediatype;
public String title;
public String author;
//Set variables based on the input barcode
public SearchForBarcode(String inputBarcode){
barcode = inputBarcode;
//An if statement is used because switch case cannot be used for anything other than int
//And a 13 digit barcode is too big to fit in an int variable.
//(JDK 1.7 supports string based cases but Android does not support it)
if (barcode.equals("5014503113629")){
mediatype = "DVD";
title = "The Young Ones Series One";
author = "Rik Mayall, Ade Edmondson, Nigel Planer, Christopher Ryan, Alexei Sayle";
}
else if (barcode.equals("5014503151423")){
mediatype = "DVD";
title = "The Office: Complete Series One & Two";
author = "Ricky Gervais, Martin Freeman, Mackenzie Crook, Lucy Davis";
}
else if (barcode.equals("5050582261103")){
mediatype = "DVD";
title = "Shaun of the Dead";
author = "Simon Pegg, Nick Frost, Lucy davis, Kate Ashfield, Dylan Moran, Bill Nighy, Penelope Wilton";
}
else if (barcode.equals("5021290037243")){
mediatype = "Game";
title = "Batman: Arkham Asylum (PS3)";
author = "Warner Brothers";
}
else if (barcode.equals("5026555402323")){
mediatype = "Game";
title = "Bioshock 2 (PS3)";
author = "2K Games";
}
else if (barcode.equals("5021290046573")){
mediatype = "Game";
title = "Tomb Raider Trilogy HD (PS3)";
author = "Crystal Dynamics";
}
else if (barcode.equals("6025273901261")){
mediatype = "CD";
title = "Flesh Tone";
author = "Kelis";
}
else if (barcode.equals("724358480924")){
mediatype = "CD";
title = "Duran Duran";
author = "Duran Duran";
}
else if (barcode.equals("5099969605529")){
mediatype = "CD";
title = "Sounds of the Universe";
author = "Depeche Mode";
}
else if (barcode.equals("9781427802118")){
mediatype = "Book";
title = "Sgt Frog Vol. 13";
author = "Mine Yoshizaki";
}
else if (barcode.equals("978009940953")){
mediatype = "Book";
title = "Star Wars - The New Jedi Order: Vector Prime";
author = "R. A. Salvatore";
}
else{
mediatype = "Not Found";
title = "Not Found";
author = "Not Found";
}
}
}
我的数据库助手类
package com.typhoon2099.mediacatalogue;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHelper {
private static final String DATABASE_NAME = "mediaDatabase";
private static final int DATABASE_VERSION = 2;
private static final String TABLE_NAME = "table";
private OpenHelper mDbHelper;
private SQLiteDatabase mDb;
private SQLiteDatabase mDbr;
private final Context mCtx;
private static final String TAG = "UserDbAdapter";
private static class OpenHelper extends SQLiteOpenHelper{
OpenHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+TABLE_NAME+"" +
" (_id integer primary key," +
" mediatype text not null," +
" title text not null" +
" author text not null" +
" wishlist integer" +
");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
public DatabaseHelper(Context ctx) {
this.mCtx = ctx;
}
//This method is called from the controlling class when the open() call is used
//it creates an instance of openHelper (detailed above) and sets up appropriate
//connections to the database.
public DatabaseHelper open() throws SQLException {
mDbHelper = new OpenHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
mDbr = mDbHelper.getReadableDatabase();
return this;
}
//used to close db connections
public void close() {
mDbHelper.close();
}
//When we wish to insert a record we can call this method, passing
//in the appropriate parameters. The method then binds the
//parameters to the insert command and then executes it
//against the appropriate table in the mDB database instance
public long addMedia(SearchForBarcode result) {
Log.d(TAG,"Line 1");
ContentValues initialValues = new ContentValues();
Log.d(TAG,"Line 2");
initialValues.put("_id", result.barcode);
Log.d(TAG,"Line 3");
initialValues.put("mediatype", result.mediatype);
Log.d(TAG,"Line 4");
initialValues.put("title", result.title);
Log.d(TAG,"Line 5");
initialValues.put("author", result.author);
Log.d(TAG,"Line 6");
initialValues.put("wishlist", 0);
Log.d(TAG,"Line 7");
return mDb.insert(TABLE_NAME, null, initialValues);
}
//This function is used to delete an item from the database by passing through the barcode for the item.
public void deleteMedia(String barcode) {
String args = "_id = "+barcode;
mDb.delete(TABLE_NAME, args, null);
}
public void UpdateWishlist(String barcode, String addOrRemove){
ContentValues args = new ContentValues();
if(addOrRemove.equals("add")){
args.put("wishlist", "1");
}
else{
args.put("wishlist","0");
}
mDb.update(TABLE_NAME, args, "barcode = ?", new String[]{barcode});
}
//This function is used to select all the madia of a particular type for displaying in the tabs
public ArrayList<String[]> selectMedia(String mediatype) {
ArrayList<String[]> results = new ArrayList<String[]>();
int counter = 0;
Cursor cursor = this.mDbr.query(TABLE_NAME, new String[]{"_id", "title", "author", "rating"}, "mediatype = "+"?",new String[]{mediatype}, null, null, "title asc");
if (cursor.moveToFirst()) {
do {
results.add(new String[3]);
results.get(counter)[0] = cursor.getString(0).toString();
results.get(counter)[1] = cursor.getString(1).toString();
results.get(counter)[2] = cursor.getString(2).toString();
results.get(counter)[3] = cursor.getString(3).toString();
counter++;
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return results;
}
}
日志类别:
看起来这就是问题所在:
而不是:
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
尝试:
还要检查
内容
和格式
是否为空
与其将笔记本电脑扔出窗外,不如从开始,然后查看
您应该能够分步执行代码,以精确地确定导致异常的代码行。一旦发现问题,诊断原因通常很容易。请不要重复发布哪一行是MainActivity.java:193?MainActivity.java:193…您能在MainActivity.java中的第193行添加注释吗。我已经发布了Toast通知,其中包含变量的内容和显示细节。还有,是不是给监管者额外的服务而不是那个监管者?试过了,也因为同样的原因崩溃了。刚刚更新了答案..试一下如果不是答案,同样的错误会出现在手动输入条形码的上面。我认为这与上面声明的数据库助手有关。这就是我所能想到的。我很确定这是
数据库。addMedia(result)代码>行。在日志运行之前,它将被删除,然后程序崩溃。不幸的是,我不知道如何错误地传递变量。还有一个奇怪的日志关于zxing没有正确地传递东西,但这是胡说,我已经烤了所有我需要的信息,所以对象看起来很好。另外,我的应用程序明天就要交上来了,如果我不能弄清楚这个问题,我基本上完蛋了。1)你看过那些链接了吗?2) 在此处发布完整堆栈跟踪,当前logcat输出被截断,因此我们无法看到发生NullPointerException的确切行。12-08 17:36:07.698:D/MainActivity(7809):result=com.typhon2099.mediacatalogue。SearchForBarcode@40554408Want让我再倒些原木?在尝试添加到数据库之前尝试了一个断点,结果似乎很好。在logcat输出中有一行写着“再11行”,请更新原始问题以包括再11行。
12-08 16:28:20.525: I/System.out(6862): Sending WAIT chunk
12-08 16:28:20.525: W/ActivityThread(6862): Application com.typhoon2099.mediacatalogue is waiting for the debugger on port 8100...
12-08 16:28:20.626: I/dalvikvm(6862): Debugger is active
12-08 16:28:20.726: I/System.out(6862): Debugger has connected
12-08 16:28:20.726: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:20.926: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:21.126: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:21.326: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:21.526: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:21.737: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:21.937: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:22.137: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:22.337: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:22.537: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:22.738: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:22.938: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:23.138: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:23.338: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:23.538: I/System.out(6862): waiting for debugger to settle...
12-08 16:28:23.739: I/System.out(6862): debugger has settled (1439)
12-08 16:28:24.089: D/dalvikvm(6862): GC_EXTERNAL_ALLOC freed 53K, 50% free 2726K/5379K, external 0K/0K, paused 31ms
12-08 16:28:28.784: W/KeyCharacterMap(6862): Can't open keycharmap file
12-08 16:28:28.784: W/KeyCharacterMap(6862): Error loading keycharmap file '/system/usr/keychars/atmel-touchscreen.kcm.bin'. hw.keyboards.131074.devname='atmel-touchscreen'
12-08 16:28:28.784: I/KeyCharacterMap(6862): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-08 16:28:31.636: D/PhoneWindow(6862): couldn't save which view has focus because the focused view com.android.internal.policy.impl.PhoneWindow$DecorView@40515630 has no id.
12-08 16:28:33.718: W/IInputConnectionWrapper(6862): showStatusIcon on inactive InputConnection
12-08 16:28:33.748: W/IInputConnectionWrapper(6862): InputConnection = android.view.inputmethod.BaseInputConnection@4052b0b8, active client = false
12-08 16:28:38.553: D/MainActivity(6862): Got from Database
12-08 16:29:12.206: W/ActivityThread(7049): Application com.typhoon2099.mediacatalogue is waiting for the debugger on port 8100...
12-08 16:29:12.216: I/System.out(7049): Sending WAIT chunk
12-08 16:29:12.226: I/dalvikvm(7049): Debugger is active
12-08 16:29:12.416: I/System.out(7049): Debugger has connected
12-08 16:29:12.416: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:12.616: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:12.817: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:13.017: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:13.217: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:13.427: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:13.627: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:13.817: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:14.028: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:14.228: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:14.428: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:14.628: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:14.828: I/System.out(7049): waiting for debugger to settle...
12-08 16:29:15.029: I/System.out(7049): debugger has settled (1343)
12-08 16:29:15.269: D/dalvikvm(7049): GC_EXTERNAL_ALLOC freed 58K, 50% free 2726K/5379K, external 0K/0K, paused 30ms
12-08 16:29:16.650: W/KeyCharacterMap(7049): Can't open keycharmap file
12-08 16:29:16.650: W/KeyCharacterMap(7049): Error loading keycharmap file '/system/usr/keychars/atmel-touchscreen.kcm.bin'. hw.keyboards.131074.devname='atmel-touchscreen'
12-08 16:29:16.650: I/KeyCharacterMap(7049): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-08 16:29:18.973: D/PhoneWindow(7049): couldn't save which view has focus because the focused view com.android.internal.policy.impl.PhoneWindow$DecorView@405132f8 has no id.
12-08 16:29:20.044: W/IInputConnectionWrapper(7049): showStatusIcon on inactive InputConnection
12-08 16:29:20.044: W/IInputConnectionWrapper(7049): InputConnection = android.view.inputmethod.BaseInputConnection@4052b0a8, active client = false
12-08 16:29:25.249: D/MainActivity(7049): Got from Database
12-08 16:29:31.895: D/AndroidRuntime(7049): Shutting down VM
12-08 16:29:31.895: W/dalvikvm(7049): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
12-08 16:29:31.965: E/AndroidRuntime(7049): FATAL EXCEPTION: main
12-08 16:29:31.965: E/AndroidRuntime(7049): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=195543262, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {com.typhoon2099.mediacatalogue/com.typhoon2099.mediacatalogue.MainActivity}: java.lang.NullPointerException
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread.deliverResults(ActivityThread.java:2883)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2925)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread.access$2000(ActivityThread.java:132)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1063)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.os.Handler.dispatchMessage(Handler.java:99)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.os.Looper.loop(Looper.java:143)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread.main(ActivityThread.java:4196)
12-08 16:29:31.965: E/AndroidRuntime(7049): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 16:29:31.965: E/AndroidRuntime(7049): at java.lang.reflect.Method.invoke(Method.java:507)
12-08 16:29:31.965: E/AndroidRuntime(7049): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-08 16:29:31.965: E/AndroidRuntime(7049): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-08 16:29:31.965: E/AndroidRuntime(7049): at dalvik.system.NativeStart.main(Native Method)
12-08 16:29:31.965: E/AndroidRuntime(7049): Caused by: java.lang.NullPointerException
12-08 16:29:31.965: E/AndroidRuntime(7049): at com.typhoon2099.mediacatalogue.MainActivity.onActivityResult(MainActivity.java:193)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.Activity.dispatchActivityResult(Activity.java:4010)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:123)
12-08 16:29:31.965: E/AndroidRuntime(7049): at android.app.ActivityThread.deliverResults(ActivityThread.java:2879)
12-08 16:29:31.965: E/AndroidRuntime(7049): ... 11 more
12-08 16:29:33.467: I/Process(7049): Sending signal. PID: 7049 SIG: 9
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
String contents = scanResult.getContents();
String format = scanResult.getFormatName();