2013-01-18 55 views
0

我正试图从窗体向设备上的本地数据库提交详细信息。我得到一个空指针,似乎在这部分代码中发生。我有一种感觉,这可能与我试图从ImageView中获取图像的方式有关。尝试从ImageView中获取图像时发生空指针异常

任何想法?

addContactBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "Add Contact", Toast.LENGTH_SHORT).show(); 
      i = new Intent(v.getContext(), ViewActivity.class); 
      //Add contact to database 
      dbAdapter.addContact(nameBox.getText().toString(), numberBox.getText().toString(), emailBox.getText().toString(), imgHolder.getDrawingCache()); 
      startActivity(i); 
     } 
    }); 
} 

这是的addContact()方法:

public void addContact(String name, String number, String email, Bitmap img){ 
    ContentValues values = new ContentValues(); 

    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    img.compress(Bitmap.CompressFormat.PNG, 100, out); 

    values.put(COLUMN_NAME, name); 
    values.put(COLUMN_NUMBER, number); 
    values.put(COLUMN_EMAIL, email); 
    values.put(COLUMN_IMG, out.toByteArray()); 

    db.insert(TABLE_NAME, null, values); 
    Toast.makeText(context, "Contact Added Successfully!", Toast.LENGTH_SHORT).show(); 
} 

这是日志输出:

01-17 23:57:16.939: E/AndroidRuntime(4582): FATAL EXCEPTION: main 
01-17 23:57:16.939: E/AndroidRuntime(4582): java.lang.NullPointerException 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at com.example.contactappca2.AddActivity$2.onClick(AddActivity.java:73) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.view.View.performClick(View.java:3549) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.view.View$PerformClick.run(View.java:14400) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.os.Handler.handleCallback(Handler.java:605) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.os.Looper.loop(Looper.java:154) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at android.app.ActivityThread.main(ActivityThread.java:4944) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-17 23:57:16.939: E/AndroidRuntime(4582):  at dalvik.system.NativeStart.main(Native Method) 
+0

什么也正是在这条线'(AddActivity.java:73)'? – Ameen

+2

如果您将线分成不同的线条,可能会让您更好地了解您的哪些对象初始化不良。 – DigCamara

+0

@Ameen 73行:'imgHolder.getDrawingCache();' – Javacadabra

回答

2

它的更好,如果你直接传位图,而不是imgHolder.getDrawableCache(),它应该工作,

BitmapDrawable drawable = (BitmapDrawable) imgHolder.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 

i = new Intent(v.getContext(), ViewActivity.class); 
//Add contact to database 
dbAdapter.addContact(nameBox.getText().toString(), numberBox.getText().toString(), emailBox.getText().toString(), bitmap); 
startActivity(i); 
+0

我试过这个,但得到相同的错误 – Javacadabra

+1

看看答案[这里](http://stackoverflow.com/questions/2339429/android-view-getdrawingcache-returns -null只空)。 – abhi

+0

谢谢你,你的链接解决了问题! – Javacadabra

相关问题