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