2011-07-12 9 views
0

SDCardのグリッドビューで画像を設定したいと思います。私は静的images.But私は私のプロジェクトを実行するSDCardのためにnullpointerのエラーを表示してgridviewを作った。SDCardを使用してgridviewで画像を設定する方法

public class MyGridViewSDActivity extends Activity{ 
    private Cursor cursor; 
    private int columnIndex; 
    ImageAdapter adapter; 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mygridacti); 

     String[] projection = {MediaStore.Images.Thumbnails._ID}; 
     cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Thumbnails._ID); 
     columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 

     GridView gView = (GridView)findViewById(R.id.grdvw); 
     gView.setAdapter(new ImageAdapter(this)); 
     adapter.notifyDataSetChanged(); 

     gView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, 
        long id) { 
       // TODO Auto-generated method stub 
       String[] projection = {MediaStore.Images.Thumbnails.DATA}; 
       cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Thumbnails.IMAGE_ID); 
       columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 
       cursor.moveToPosition(position); 
       String imagePath = cursor.getString(columnIndex); 
      } 
     }); 
    } 
} 

class ImageAdapter extends BaseAdapter{ 
    Cursor cursor; 
    ImageView imageview; 
    Context mContext; 
    int columnIndex; 
    public ImageAdapter(Context adapter){ 
     mContext = adapter; 
    } 

    public ImageAdapter(OnClickListener onClickListener) { 
     // TODO Auto-generated constructor stub 

    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return cursor.getCount(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     if(convertView == null){ 
      imageview = new ImageView(mContext); 
      cursor.moveToPosition(position); 
      int imageID = cursor.getInt(columnIndex); 
      imageview.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, ""+imageID)); 
      imageview.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      imageview.setPadding(8, 8, 8, 8); 
      imageview.setLayoutParams(new GridView.LayoutParams(100, 100)); 
     } 
     else{ 
      imageview = (ImageView)convertView; 
     } 
     return imageview; 
    } 
} 

エラー:

07-12 12:07:30.449: ERROR/AndroidRuntime(2231): FATAL EXCEPTION: main 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myworkspace/com.myworkspace.MyGridViewSDActivity}: java.lang.NullPointerException 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.os.Looper.loop(Looper.java:123) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at dalvik.system.NativeStart.main(Native Method) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231): Caused by: java.lang.NullPointerException 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at com.myworkspace.ImageAdapter.getCount(MyGridViewSDActivity.java:64) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.widget.GridView.setAdapter(GridView.java:131) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at com.myworkspace.MyGridViewSDActivity.onCreate(MyGridViewSDActivity.java:31) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586) 
07-12 12:07:30.449: ERROR/AndroidRuntime(2231):  ... 11 more 
+0

あなたのコードを表示してください。あなたのコードに何が間違っているかを知ることができます。 – Nirav

+0

私のコードを編集しました。 – Saurabh

+0

nullpointer例外を表示するか、少なくともそれが発生する行を表示してください。 – Ognyan

答えて

0

、nullポインタ例外があなたのpublic int getCount()機能でコードreturn cursor.getCount();のこの部分から来ているようです。

カーソルオブジェクトは初期化されていませんが、逆参照しているため例外です。 Soln - 逆参照する前に何か(NULL :)以外のもの)にカーソルを初期化します。

関連する問題