2015-10-26 14 views
5
public class CategoryAdapter extends BaseAdapter { 
Context context; 
ArrayList<ModelCategory> model; 
LayoutInflater layoutInflater; 

public CategoryAdapter(Activity activity, ArrayList<ModelCategory> model) { 
    this.model = model; 
    this.context = activity; 
} 

@Override 
public int getCount() { 
    return model.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder = null; 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = layoutInflater.inflate(R.layout.category_adapter, parent, false); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.category_grid_image); 
     viewHolder.textView = (TextView) convertView.findViewById(R.id.get_category_title); 
     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.textView.setText(model.get(position).getCategoryName()); 
    if(position<=3){ 
     viewHolder.imageView.setImageBitmap(StringToBitMap(model.get(position).getCategoryImage())); 
    } 
    else { 
     viewHolder.imageView.setImageBitmap(getBitmap(model.get(position).getCategoryImage())); 
    } 
    return convertView; 
} 

private class ViewHolder { 
    public ImageView imageView; 
    public TextView textView; 
} 

private Bitmap getBitmap(String path) { 

    BitmapFactory.Options option = new BitmapFactory.Options(); 
    option.inSampleSize = 8; 
    Bitmap bitmap = BitmapFactory.decodeFile(path, option); 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(getImageOrientation(path)); 
    Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
    Bitmap resized = Bitmap.createScaledBitmap(rotatedBitmap, 150, 150, true); 
    return resized; 
} 


private static int getImageOrientation(String imagePath) { 
    int rotate = 0; 
    try { 
     File imageFile = new File(imagePath); 
     ExifInterface exif = new ExifInterface(
       imageFile.getAbsolutePath()); 
     int orientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, 
       ExifInterface.ORIENTATION_NORMAL); 

     switch (orientation) { 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       rotate = 270; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       rotate = 180; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       rotate = 90; 
       break; 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return rotate; 
} 


public Bitmap StringToBitMap(String encodedString){ 
    try { 
     byte [] encodeByte=Base64.decode(encodedString, Base64.DEFAULT); 
     Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
     return bitmap; 
    } catch(Exception e) { 
     e.getMessage(); 
     return null; 
    } 
} 

を仮想メソッドを呼び出そうとのNullPointerException:} 'int型android.graphics.Bitmap.getWidth()' 私は以下のような<code>error</code>を取得しています</p> <p>を...

のjava.lang.NullPointerException:ヌルオブジェクトリファレンスで仮想メソッド 'int android.graphics.Bitmap.getWidth()'を呼び出そうとしました at com.adapter.CategoryAdapter.getBitmap(CategoryAdapter.java:92) at com.adapter.CategoryAdapter.getView(CategoryAdapter .java:75)012 android.widget.GridView.makeRowでandroid.widget.GridView.makeAndAddView(GridView.java:1456) でandroid.widget.AbsListView.obtainView(AbsListView.java:2896) (GridView.java:361) ででandroid.widget.GridView.fillDown(GridView.java:302)android.widget.GridView.fillFromTop(GridView.java:437)の android.widget.GridView.layoutChildren(GridView.java:1284)の はandroidです。ウィジェット.AbsListView.onLayout(AbsListView.java:2700) android.view.View.layout(View.java:16899) with android.view.ViewGroup.layout(ViewGroup.java:5405) android.widget。 RelativeLayout.onLayout(RelativeLayout.java:1077) android.view.View.layout(View.j (FrameLayout.java:579) (android.widget.FrameLayout.onLayout(FrameLayout.java:16899)) で、 をandroid.view.ViewGroup.layout(ViewGroup.java:5405)の にあります。 (ViewGroup.java:5405) android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout。 java:1043)android.widget.LinearLayout.setChildFrame(LinearLayout.java:1043) の画像1702) android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556) at android .widget.LinearLayout.onLayout(LinearLayout.java:1465) android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) android.widget .RelativeLayout.onLayout(RelativeLayout.java:1077) android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.FrameLayout .layoutChildren(FrameLayout.java:579) android.widget.FrameLayout.onLayout(FrameLayout.java:514) android.view.View.layout(View.java:16899) android.view.ViewGroup.layout (ViewGroup.java:5405) android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702) アンドロイドでandroid.view.View.layoutでandroid.widget.LinearLayout.onLayout(LinearLayout.java:1465) でandroid.widget.LinearLayout.layoutVertical(LinearLayout.java:1556) (View.java:16899) で.view.ViewGroup.layout(ViewGroup.java:5405)android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)の android.widget.FrameLayout.onLayout(FrameLayout.java:514)の のandroid.view .View.layout(View.java:16899) android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702) at android.widget.LinearLayout .layoutVertical(LinearLayout.java:1556) android.widget.LinearLayoutにあります。onLayout(LinearLayout.java:1465) android.view.View.layout(View.java:16899) (android.view.ViewGroup.layout(ViewGroup.java:5405)) at android.widget.FrameLayout.layoutChildren FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:16899) android.view.ViewGroup.layout(ViewGroup。 java:5405)

どうすれば解決できますか?

+0

ビットマップの作成が失敗したようです。 'path'値が正しいことを確認して、実際のビットマップを指していますか? –

+0

getBitmapメソッドをもう一度チェックすると、nullポインタが取得されます。 –

答えて

4

エラートレースはpublic static Bitmap decodeFile(String pathName, Options opts)方法の文書として

Bitmap bitmap = BitmapFactory.decodeFile(path, option); 
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 

にそのエラーoccoursを表示:画像データを復号化することができなかった場合

return The decoded bitmap, or null if the image data could not be 
decoded, or, if opts is non-null, if opts requested only the 
size be returned (in opts.outWidth and opts.outHeight) 

このメソッドは、nullを返します。このメソッドが失敗した理由を調べるには、E/BitmapFactory: Unable to decode stream: ...のようなログを記録してください。多分あなたは間違った道を提供しました。

0

私の場合の問題は、nullを返すバックグラウンドスレッドで 'decodeFile'を呼び出すことでした。そのコードをメインスレッドに移動することで問題は解決されました。

関連する問題

 関連する問題