Am getting error when getting images from sdcard folder and view in gridview.
My class as follows:
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;
}
}
}
And my xml file as follows:
<?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>
The logcat error shows Null Pointer Exception.
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)
I didnt know how to solve this. Help me thanks in advance
you are using imagenames
array with 100
size but you don't know that how many images exist into the "WallpaperPro
" folder. So you must need to use ArrayList
.
And your GridView size is also 100, but might possible that imagenames array contains less than 100 images. This is the main reason for null pointer exception.
use this line String backupPath=Environment.getExternalStorageDirectory().getPath() + "/WallpaperPro";
as String backupPath=Environment.getExternalStorageDirectory() + "/WallpaperPro";
or String backupPath=Environment.getExternalStorageDirectory().getAbsolutePath() + "/WallpaperPro";
make sure your folder name is WallpaperPro
.
I hope this will help you, comment for any query.