我的logcat指示空指针异常,我不知道如何解决这些空指针异常。
我的适配器类中的空指针异常:
File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/");
int count=dir.list().length;
String[] fileNames = dir.list();
检查以上行...这是一个返回null的值。
我的代码:
package ImageViewExample.ImageViewExample;
import java.io.File;
import android.R.string;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;
public class ImageViewExample extends Activity {
/** Called when the activity is first created. */
private Cursor imagecursor, actualimagecursor;
private int image_column_index, actual_image_column_index;
GridView imagegrid;
private int count;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init_phone_image_grid();
}
private void init_phone_image_grid() {
String[] img = { MediaStore.Images.Thumbnails._ID };
imagecursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID + "");
System.out.println("path"+managedQuery(MediaStore.Images
.Thumbnails.EXTERNAL_CONTENT_URI, img, null,null, MediaStore.Images
.Thumbnails.IMAGE_ID + ""));
image_column_index =
imagecursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
System.out.println("index"+imagecursor.getColumnIndexOrThrow
(MediaStore.Images.Thumbnails._ID));
count = imagecursor.getCount();
imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
imagegrid.setAdapter(new ImAdapterh(this));
System.out.println("index"+this);
imagegrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v,int position, long id) {
System.gc();
String[] proj = { MediaStore.Images.Media.DATA };
actualimagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
proj,null,null, null);
actual_image_column_index =
actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToPosition(position);
String i = actualimagecursor.getString(actual_image_column_index);
System.gc();
Intent intent = new Intent(getApplicationContext(), ViewImage.class);
intent.putExtra("filename", i);
startActivity(intent);
}
});
}
public class ImAdapterh extends BaseAdapter{
File dir=new File(Environment.getExternalStorageDirectory(),"/Pictures/");
int count=dir.list().length;
String[] fileNames = dir.list();
private Context mContext;
public ImAdapterh(Context c) {
mContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = null;
for(String bitmapFileName : fileNames)
{
if (convertView == null)
{ // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new Gallery.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" +
bitmapFileName);
System.out.println(dir);
imageView.setImageBitmap(bmp);
}else
{
imageView = (ImageView) convertView;
}
}
return imageView;
}
}}
Logcat错误:
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): FATAL EXCEPTION: main
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): java.lang.RuntimeException: Unable to
start activity
ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample
.ImageViewExample.ImageViewExample}: java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.os.Handler.dispatchMessage(Handler.java:99)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.os.Looper.loop(Looper.java:123)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread.main(ActivityThread.java:4627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
java.lang.reflect.Method.invokeNative(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
java.lang.reflect.Method.invoke(Method.java:521)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
dalvik.system.NativeStart.main(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): Caused by:
java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh.<init>
(ImageViewExample.java:71)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
ImageViewExample.ImageViewExample.ImageViewExample
.init_phone_image_grid(ImageViewExample.java:49)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
ImageViewExample.ImageViewExample.ImageViewExample.onCreate(ImageViewExample.java:36)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): ... 11 more
答案 0 :(得分:1)
list()
的{{1}}方法可以返回File
。来自Javadoc:
返回:一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空。 如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。
答案 1 :(得分:0)
在我看来,list()是产生错误的那个,这可能是因为该文件夹中没有文件(“/ myImages /”)
要解决此问题,您必须检查文件夹是否为空:
File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/");
if(dir!=null &&dir.list()!=null)
{
int count=dir.list().length;
String[] fileNames = dir.list();
//...<REST OF THE CODE>
}else
{
//do empty folder handler here.
}
或
File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/");
if(dir.list()==null)
{
dir.setList(new ArrayList());// IF LIST is null, create empty list.
}
int count=dir.list().length;
String[] fileNames = dir.list();
//..<REST OF THE CODE> ..
答案 2 :(得分:0)
列出不存在的目录或您没有权限的目录的文件内容或数量时,将引发空指针异常。
检查以下内容:
同时发布堆栈跟踪和logCat
输出。这也可以帮助人们帮助你。
HTH,
斯利拉姆