2016-07-01 13 views
0

これはMainActivityファイルです。私がエミュレータと電話機でそれを実行すると、logcatはNullPointerExceptionに起因するクラッシュを表示します。私は、ユーザや他のアクティビティが自分のメソッドに "null"値を渡すことを許さないことについて多くを読んだが、これを回避することはできなかった。AndroidディスプレイのSDカードファイルはjava.lang.NullPointerExceptionをスローします

import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.io.File; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //I used a listview with id= "filelist" in layout 
     ListView lv; 
     ArrayList<String> FilesInFolder; 
     FilesInFolder = GetFiles(Environment.getExternalStorageDirectory().getPath()+ "/sdcard/"); 
     lv = (ListView)findViewById(R.id.filelist); 
     ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, FilesInFolder); 

     lv.setAdapter(listAdapter); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       // Clicking on items 
      } 
     }); 

    } 
    public ArrayList<String> GetFiles(String DirectoryPath) { 
     ArrayList<String> MyFiles = new ArrayList<String>(); 
     File f = new File(DirectoryPath); 

     f.mkdirs(); 
     File[] files = f.listFiles(); 
     if (files.length == 0) 
      return null; 
     else { 
      for (int i=0; i<files.length; i++) 
       MyFiles.add(files[i].getName()); 
     } 

     return MyFiles; 
    } 
} 

これはlogcatです:

07-02 01:09:40.500 4407-4407/com.amenhotep.filelister W/dalvikvm: threadid=1: calling UncaughtExceptionHandler 
07-02 01:09:40.501 4407-4407/com.amenhotep.filelister E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.amenhotep.filelister, PID: 4407 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.amenhotep.filelister/com.amenhotep.filelister.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2389) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441) 
     at android.app.ActivityThread.access$900(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
     at android.os.Handler.dispatchMessage(Handler.java:110) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5345) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at com.amenhotep.filelister.MainActivity.GetFiles(MainActivity.java:44) 
     at com.amenhotep.filelister.MainActivity.onCreate(MainActivity.java:24) 
     at android.app.Activity.performCreate(Activity.java:5343) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441) 
     at android.app.ActivityThread.access$900(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
     at android.os.Handler.dispatchMessage(Handler.java:110) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5345) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
     at dalvik.system.NativeStart.main(Native Method) 
+0

私たちはあなたを助けることができるために、logcatを共有! – W0rmH0le

+0

変数を大文字で入力しないでください。それはあなたのコードを読みにくくします。 –

+0

あなたのAndroidmanifest.xmlに権限を設定しましたか? babadaba

答えて

0

問題はSDカード
String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();

のパスを取得するには、このコードを使用し、あなたのSDカードのパスにあり、"/sdcard/"を追加する必要はありませんそれにもGetFilesメソッドを変更し、前にsdcardが存在するのでmkdirs()を削除してください。

この例を見

File sdcard_files_and_folders[] = new File(DIR_SDCARD).listFiles(); 
    for (File fileOrFolder: sdcard_files_and_folders) { 
     // do any thing that you want, add them to list or... 
     Log.i("FILE", fileOrFolder.toString()); 
    } 
+0

私が何をしましたかあなたは言った:1- 'String DIR_SDCARD = Environment.getExternalStorageDirectory()。getAbsolutePath(); ArrayList FilesInFolder; FilesInFolder = GetFiles( "DIR_SDCARD"); '2を削除した' mkdirs() 'もあります。それでも私は同じ例外を受け取ります。 – Amenhotep

+0

'GetFiles(" DIR_SDCARD ")'が間違っています。 'GetFiles(DIR_SDCARD)'を使用してください –

+0

!働いた!!! – Amenhotep

関連する問題