2014-08-31 2 views
0

현재 비트 맵 이미지를 ImageView에 추가하려고하지만 NPE를 던지고 있습니다. 나는 그것이 과거에 효과가 있었는지 문제가 무엇인지 전혀 모른다. 이전 작업 영역의 일부 문제로 인해 프로젝트를 다시 작성했습니다.ImagView의 이미지를 설정할 수 없습니다.

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.setImageBitmap(bm) 던지는 라인 : 여기

내가 ImageView에 비트 맵을 추가하는 방법이다. 분명히, bm은 null이 아니며, iv도 아니다. 여기

내가에서 iv을 팽창 xml 파일 : 나는 구성 요소 중 하나가 null의 경우 확인하여 문제를 식별하기 위해 노력했다

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="@dimen/activity_horizontal_margin" > 
<RelativeLayout 
    android:id="@+id/rowRelativeLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/rowImageView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:scaleType="center" /> 

    <LinearLayout 
     android:layout_width="1dp" 
     android:layout_height="match_parent" > 

     <View style="@style/Divider" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/rowTextView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/imageView" 
     android:textColor="@color/black" 
     android:textSize="20sp"> </TextView> 
</RelativeLayout> 
</TableRow> 

하지만 ivbm는 없습니다.

편집 :

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

+0

스택 트레이스를 게시 하시겠습니까? 그것을 좁힐 수 있습니다. –

답변

1

문제의 하나와 일치하지 않았다가되는 명세서를 확인하는 경우 :

if (bm == null && iv == null) { 
    iv.setVisibility(View.GONE); 
} 

그래서 else 블록은 null 중 하나가 실제로 실행될 수 있습니다. 둘 다 null이면 실행되지 않습니다.

편집 : 당신이 노력하고 있기 때문에

당신이

if (bm == null || iv == null) { 
    iv.setVisibility(View.GONE); 
} 

그리고 오류가 계속 발생 같은 것을 읽을 수를 변경 한 경우, 이것은 BM 그 IV가 null의 의미, 그리고 것 그것에 대한 메소드를 호출하면 실패합니다.

ImageView iv = (ImageView) newRow.findViewById(R.id.imageView); 

어떻게 든 실패하는 것을 의미한다.

+0

작동하지 않았습니다. 다른 아이디어가 있습니까? – gedr

+0

죄송합니다. 따라 가지 않고 정확히 작동하지 않는 것은 무엇입니까? 코드를 OR 문으로 변경하면 예외가 발생한다는 의미입니까? –

+0

예, 예외가 계속 발생합니다. – gedr

1

조건 (boolean && boolean)모두 값이 true 인 경우에만 true를 반환합니다. 그래서 true && false ->false. 그래서 그들 중 하나는 null 일 수 있습니다. || instaed가 && 인 경우 조건 중 하나가 참이면 true를 반환합니다.

+0

작동하지 않았습니다. 다른 아이디어가 있습니까? – gedr

+0

다음 else 문에 다른 코드에 문제가 있습니다. 'if (bm == null || iv == null)'로 널을 검사하면이 두 객체만을 사용하는 행에 NPE가있을 수 없습니다. – Gumbo

+0

다른 코드> D : – gedr

관련 문제