Java 无法设置ImagView';s形象
我目前正试图将位图图像添加到Java 无法设置ImagView';s形象,java,android,bitmap,imageview,Java,Android,Bitmap,Imageview,我目前正试图将位图图像添加到ImageView中,但它抛出了一个NPE。我不知道这个问题是什么,因为它在过去起了作用。由于前一个工作区存在一些问题,我刚刚重新创建了该项目 下面是我将位图添加到ImageView的方法: private void insertElement(String data, String key, int i, Bitmap bm, boolean flag, boolean b) { LayoutInflater inflater = (Layo
ImageView
中,但它抛出了一个NPE。我不知道这个问题是什么,因为它在过去起了作用。由于前一个工作区存在一些问题,我刚刚重新创建了该项目
下面是我将位图添加到ImageView
的方法:
private void insertElement(String data, String key, int i, Bitmap bm,
boolean flag, boolean b) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View newRow = inflater.inflate(R.layout.row, null, false);
newRow.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
TextView dataTextView = (TextView) newRow
.findViewById(R.id.rowTextView);
dataTextView.setText("\t " + data);
ImageView iv = (ImageView) newRow.findViewById(R.id.imageView);
newRow.setId(i);
newRow.setOnClickListener(new OnClickListener() {
//ommited
});
View v = new View(this);
v.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, 1));
v.setBackgroundColor(Color.argb(18, 111, 111, 111));
dataTextView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
int sf = 1;
if (i == 0) {
sf = 2;
dataTextView.setShadowLayer(3, 0, 0, Color.BLACK);
dataTextView.setTextColor(getResources().getColor(R.color.white));
}
if (bm == null && iv == null) {
iv.setVisibility(View.GONE);
} else {
iv.setImageBitmap(bm); // <---------- Error here
/** !original code!
* iv.setImageBitmap(getCroppedBitmap(Bitmap.createScaledBitmap(
Bitmap.createScaledBitmap(bm, bm.getWidth() / 2 * sf,
bm.getWidth() / 2 * sf, true),
dataTextView.getMeasuredHeight() * sf,
dataTextView.getMeasuredHeight() * sf, true), iv, key));
*/
}
if (flag) {
dataTextView.setTextSize(40);
tableScrollView.addView(newRow, i);
} else {
tlcard.addView(newRow, i - 1);
if (!b) {
tlcard.addView(v, i);
}
}
}
我试图通过检查是否有任何组件为空来确定问题,但是iv
和bm
不是空的
编辑:以下是完整的错误日志:
08-31 21:29:39.693: W/System.err(32495): java.lang.NullPointerException
08-31 21:29:39.693: W/System.err(32495): at com.tabcards.android.Search.insertElement(Search.java:422)
08-31 21:29:39.693: W/System.err(32495): at com.tabcards.android.Search.createUI(Search.java:245)
08-31 21:29:39.693: W/System.err(32495): at com.tabcards.android.Search.access$1(Search.java:224)
08-31 21:29:39.693: W/System.err(32495): at com.tabcards.android.Search$1$1.run(Search.java:116)
08-31 21:29:39.693: W/System.err(32495): at android.os.Handler.handleCallback(Handler.java:725)
08-31 21:29:39.693: W/System.err(32495): at android.os.Handler.dispatchMessage(Handler.java:92)
08-31 21:29:39.693: W/System.err(32495): at android.os.Looper.loop(Looper.java:158)
08-31 21:29:39.693: W/System.err(32495): at android.app.ActivityThread.main(ActivityThread.java:5751)
08-31 21:29:39.693: W/System.err(32495): at java.lang.reflect.Method.invokeNative(Native Method)
08-31 21:29:39.693: W/System.err(32495): at java.lang.reflect.Method.invoke(Method.java:511)
08-31 21:29:39.693: W/System.err(32495): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
08-31 21:29:39.693: W/System.err(32495): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
08-31 21:29:39.698: W/System.err(32495): at dalvik.system.NativeStart.main(Native Method)
编辑:.java文件中的id与.xml中的id不匹配问题在于if语句检查:
if (bm == null && iv == null) {
iv.setVisibility(View.GONE);
}
因此,如果其中一个为null,else块确实可以执行。如果它们都为空,它就不会执行
编辑:
如果你把它改成
if (bm == null || iv == null) {
iv.setVisibility(View.GONE);
}
错误仍然会发生,这意味着iv是空的,而不是bm,因为您试图对它调用一个方法,但它失败了
这意味着
ImageView iv = (ImageView) newRow.findViewById(R.id.imageView);
以某种方式失败。条件
(boolean&&boolean)
仅在两个值均为true时返回true。所以true&&false
->false
。所以其中一个可能是空的。使用|
安装的&&
,如果其中一个条件为真,则返回真。您也可以发布堆栈跟踪吗?这可能有助于缩小范围。对不起,我不明白,到底是什么不起作用?你的意思是如果你将代码更改为OR语句,它仍然会遇到异常吗?是的,异常仍然会发生。好吧,我搞错了,现在它说ImageView为null。你知道为什么吗?/facepalm。。。我忘了我更改了id。谢谢你的帮助。没问题,很高兴提供帮助。然后else语句中的其他代码出现问题。如果您使用If(bm==null | | iv==null)
检查是否存在空案例,则行中不能有仅使用这两个对象的NPE。@gedr您确定没有输入错误吗?复制我上一条评论中的代码。好吧,我把它搞乱了,现在它说ImageView是空的。你知道它是如何为空的吗?/facepalm。。。我忘了我更改了id。谢谢您的帮助。@gedr You's welocme:D PS:您应该自己编辑您的问题/A以便将来的观众不会感到困惑。
ImageView iv = (ImageView) newRow.findViewById(R.id.imageView);