我已经在权限文件中加入了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>和<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>权限了,但是还是抛出java.lang.NullPointerException
我的源码如下,功能是想把SD卡里有图片的文件夹都放进ArrayList里面的,我在javaproject里面运行算法是可以的,但是到S虚拟机里面就不可以了。import java.io.File;
import java.util.ArrayList;import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.GridView;
import learn.demo.GridViewAdapter;
public class MyGridViewimp extends Activity {
private GridView gridview = null;
private ArrayList<File> list = new ArrayList<File>();
//private ArrayList<File> s_list = new ArrayList<File>();

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.main);
        boolean isImafile = false; //如果该文件有一个Image了,就不能向list里加了
        this.gridview = (GridView) super.findViewById(R.id.gridview);
        //帮忙的人从这里看其,我是想获得SD卡里有图片的文件夹
        File[] fs = new File(Environment.getExternalStorageDirectory().toString()).listFiles();
        for(int i=0; i<fs.length; i++) {
         Log.i("My", fs[i].getAbsolutePath());
         if(!fs[i].isFile()) {
         findImage(fs[i].getAbsolutePath());
         } else if(isImafile==false && isImage(fs[i])){
         isImafile = true;//如果该文件有一个Image了,就不能向list里加了
         list.add(fs[i]);
         }
        }
        gridview.setAdapter(new GridViewAdapter(this,list)) ;
    } private void findImage(String path) {
File file = new File(path);
if (!file.isFile()) {
boolean isImafile = false;
File[] fs = file.listFiles();
for (int i = 0; i < fs.length; i++) {
if (!fs[i].isFile()) {
findImage(fs[i].getAbsolutePath());
} else if (isImafile == false && isImage(fs[i])) {
isImafile = true;//如果该文件有一个Image了,就不能向list里加了
list.add(fs[i]);
}
}
}
} private boolean isImage(File file) { //判断该文件是否未图片文件
String path = file.getName();
String end = path
.substring(path.lastIndexOf(".") + 1, path.length())
.toLowerCase();
if(end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp"))  {
return true;
}
return false;
}
}其异常未
04-24 11:23:37.766: ERROR/AndroidRuntime(2247): FATAL EXCEPTION: main
04-24 11:23:37.766: ERROR/AndroidRuntime(2247): java.lang.RuntimeException: Unable to start activity ComponentInfo{learn.demo/learn.demo.MyGridViewimp}: java.lang.NullPointerException
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.os.Looper.loop(Looper.java:123)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at java.lang.reflect.Method.invokeNative(Native Method)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at java.lang.reflect.Method.invoke(Method.java:521)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at dalvik.system.NativeStart.main(Native Method)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247): Caused by: java.lang.NullPointerException
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at learn.demo.MyGridViewimp.findImage(MyGridViewimp.java:41)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at learn.demo.MyGridViewimp.onCreate(MyGridViewimp.java:28)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-24 11:23:37.766: ERROR/AndroidRuntime(2247):     ... 11 more
04-24 11:23:37.786: WARN/ActivityManager(59):   Force finishing activity learn.demo/.MyGridViewimp
04-24 11:23:38.296: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{44f5ea18 learn.demo/.MyGridViewimp}
04-24 11:23:40.546: WARN/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@450ae178

解决方案 »

  1.   

    MyGridViewimp.java第41行代码是什么呢?建议发完整代码上来看一下
      

  2.   

    建议将您代码中的if (!file.isFile()) 改为:if (file!=null & !file.isFile())
      

  3.   


    此文件就是 MyGridViewimp.java最多还有是GridViewAdapter(this,list).java为
    package learn.demo;import java.io.File;
    import java.util.ArrayList;import android.content.Context;
    import android.database.DataSetObserver;
    import android.graphics.Color;
    import android.net.Uri;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Gallery;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.ListAdapter;public class GridViewAdapter implements ListAdapter {
    private Context context= null;
    private ArrayList<File> list = new ArrayList<File>();

    public GridViewAdapter(Context context, ArrayList<File> list) {
    this.context = context;
    this.list= list;
    }
    @Override
    public boolean areAllItemsEnabled() {
    // TODO Auto-generated method stub
    return false;
    } @Override
    public boolean isEnabled(int position) {
    // TODO Auto-generated method stub
    return false;
    } @Override
    public int getCount() {

    return list.size();
    } @Override
    public Object getItem(int position) {
    return position;
    } @Override
    public long getItemId(int position) {
    return position;
    } @Override
    public int getItemViewType(int position) {
    return position;
    } @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ImageButton mybut = new ImageButton(this.context);
    mybut.setBackgroundColor(Color.RED);
    mybut.setImageURI(Uri.parse(list.get(position).getAbsolutePath()));
    return mybut;
    } @Override
    public int getViewTypeCount() {
    // TODO Auto-generated method stub
    return 0;
    } @Override
    public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return false;
    } @Override
    public boolean isEmpty() {
    if(list.isEmpty()) {
    return true;
    }
    return false;
    } @Override
    public void registerDataSetObserver(DataSetObserver observer) {
    // TODO Auto-generated method stub } @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {
    // TODO Auto-generated method stub }}