2012-07-06 4 views
0

sdcard 폴더에서 이미지를 가져 와서 gridview에서 볼 때 오류가 발생합니다.gridview에서 폴더 이미지 가져 오기

내 클래스를 다음과 같이

public class Favourites extends Activity{ 
    String backupPath=Environment.getExternalStorageDirectory().getPath() + "/WallpaperPro"; 
    String name; 
    GridView favgrid; 

    Cursor cursor; 
    int columnIndex; 
    String[] imagenames=new String[100]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try{ 
     readfile(); 
     }catch(Exception e) 
     { 

     } 
     setContentView(R.layout.fav); 
     favgrid=(GridView) findViewById(R.id.favgrid); 

     String[] projection = {MediaStore.Images.Media._ID}; 
     // Create the cursor pointing to the SDCard 
     cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       projection, 
       null , 
       null, 
       null); 
     // Get the column index of the image ID 
     Toast.makeText(getApplicationContext(),""+cursor.getCount() , 1).show(); 
     columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); 
     favgrid.setAdapter(new FavAdapter(this)); 


    } 
    public void readfile() 
    { 
     //File sdCardRoot = Environment.getExternalStorageDirectory(); 
     File yourDir = new File(backupPath); 
     int i=0; 
     for (File f : yourDir.listFiles()) { 
      if (f.isFile()) 
       name = f.getName(); 
      imagenames[i]=backupPath+"/"+name; 
      Log.i("CUTEWALLPAPER", "imagenames["+i+"]= "+name); 
      i++; 

       // make something with the name 
     } 
    } 

    public class FavAdapter extends BaseAdapter { 
     private Context mContext; 
      public FavAdapter(Context c) { 
       mContext = c; 
      } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return imagenames.length; 
     } 

     @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 ImageView getView(int position, View convertView, ViewGroup parent) { 
      // ImageView i = new ImageView(mContext); 
      ImageView imageView; 
       imageView = new ImageView(mContext); 
       if (convertView == null) { 

        imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 

        imageView.setPadding(0, 0, 0, 0); 
       } else { 
        imageView = (ImageView) convertView; 
       } 

      Bitmap b=BitmapFactory.decodeFile(imagenames[position].toString()); 
      Log.i("CUTEWALLPAPER", "Position"+position+" "+b.getHeight()); 
      imageView.setImageBitmap(b); 

      imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       /* Set the Width/Height of the ImageView. */ 
       imageView.setLayoutParams(new GridView.LayoutParams(300, 300)); 
       return imageView; 
     } 

    } 

} 

그리고 같은 내 xml 파일은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:weightSum="1" android:orientation="horizontal" android:layout_height="wrap_content"> 
    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/favgrid" 
    android:layout_width="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="1" 
    android:verticalSpacing="0dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" android:layout_height="fill_parent"/> 
    </RelativeLayout> 

로그 캣 오류가 널 포인터 예외를 보여줍니다.

07-06 22:57:26.892: ERROR/AndroidRuntime(302): java.lang.NullPointerException 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at com.cutewallpaper.Favourites$FavAdapter.getView(Favourites.java:112) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at com.cutewallpaper.Favourites$FavAdapter.getView(Favourites.java:1) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.AbsListView.obtainView(AbsListView.java:1274) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.GridView.makeAndAddView(GridView.java:1218) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.GridView.makeRow(GridView.java:265) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.GridView.fillDown(GridView.java:218) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.GridView.fillFromTop(GridView.java:337) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.GridView.layoutChildren(GridView.java:1112) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.AbsListView.onLayout(AbsListView.java:1113) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.View.layout(View.java:6830) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:900) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.View.layout(View.java:6830) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.View.layout(View.java:6830) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.View.layout(View.java:6830) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.View.layout(View.java:6830) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.ViewRoot.performTraversals(ViewRoot.java:996) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.os.Looper.loop(Looper.java:123) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
07-06 22:57:26.892: ERROR/AndroidRuntime(302):  at dalvik.system.NativeStart.main(Native Method) 

나는 이것을 해결하는 방법을 알지 못했다. 당신이 100 크기 imagenames 배열을 사용하는 사전

+0

당신을 얻을 수 없습니다 .. 당신이 물어 보는 라인 – Shalini

+0

비트 맵 b = BitmapFactory.decodeFile (imagenames [position] .toString()) ;. 112의 라인입니다. – Shalini

+0

SDCard에서 모든 이미지를 검색해야합니까? – Venky

답변

0
  1. 나에게 감사 도움말하지만 당신은 얼마나 많은 이미지가 "WallpaperPro"폴더에 존재한다는 것을 모른다. 따라서 ArrayList을 사용해야합니다.

  2. GridView 크기도 100이지만 이미지 배열의 이미지 수가 100 개 미만일 수 있습니다. 이것이 널 포인터 예외의 주된 이유입니다.

  3. 사용이 라인은 String backupPath=Environment.getExternalStorageDirectory().getPath() + "/WallpaperPro";String backupPath=Environment.getExternalStorageDirectory() + "/WallpaperPro"; 또는 String backupPath=Environment.getExternalStorageDirectory().getAbsolutePath() + "/WallpaperPro";

  4. 폴더 이름 WallpaperPro 있는지 확인합니다.

모든 검색어에 대한 의견을 보내 주시면 감사하겠습니다.

+0

[getPath와 getAbolutePath의 차이점] (http://stackoverflow.com/questions/1099300/whats-the-difference-between-getpath-getabsolutepath-and-getcanonicalpath) –

+0

thnaks for elobarated 명확한 대답. 그러나 내가 arraylist에서 imagenames를 주면, 나는 imagenames [position]으로 그리드 뷰에서 선언하지 않을 것이다. – Shalini

+0

imagenames가 arraylist 일 경우 imagenames.get (position)을 사용할 수 있습니다. –

관련 문제