2016-01-15 35 views
-1

我是Android新手。我目前正在開發一個多選文件列表和壓縮文件。所以我編碼多選擇,但我有異常,這是IllegalstateException。到目前爲止,我已經在我的onSdcardistner方法執行調試工作,但listTree()方法不起作用。當我從OnsdcardlistenerMethod() 稱之爲所以這裏是代碼和異常IllegalStateException發生在調用方法

package com.example.testmutilplefile; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import java.io.File; 
import java.io.FileFilter; 
import java.util.ArrayList; 

import android.os.Environment; 
import android.util.Log; 
import android.app.Activity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ArrayAdapter; 




public class MainActivity extends ActionBarActivity { 
    public static String TAG = "SelectFiles"; 
    // public static String ZIP="zippingfile"; 
    public File filepath = Environment.getExternalStorageDirectory(); 
    public ListView directorytree; 
    public ListView filetree; 
    public TextView directorynames; 
    public TextView files; 
    public Button sdclick; 
    public ArrayList<File> directorylist = new ArrayList<File>(); 
    public ArrayList<String> directoryname = new ArrayList<String>(); 
    public ArrayList<File> filelist = new ArrayList<File>(); 
    public ArrayList<String> myfilename = new ArrayList<String>(); 



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

    } 


    public void initialComponent() { 

     sdclick = (Button) findViewById(R.id.sdcardbutton); 
     directorynames = (TextView) findViewById(R.id.directoriesname); 
     files = (TextView) findViewById(R.id.filesname); 
     directorytree = (ListView) findViewById(R.id.directorySelectionList); 
     filetree = (ListView) findViewById(R.id.fileSelectionList); 

    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 


    public void onSdCardListener(View v) { 
     File parentfile = filepath.getParentFile(); 
     Log.d(TAG, parentfile.toString()); 
     //listTree(); 

     if (filepath.equals(Environment.getExternalStorageDirectory())) { 
      Toast.makeText(this, "cant exit external storage", 
        Toast.LENGTH_SHORT).show(); 
        listTree(); 

     } else { 
      filepath = parentfile; 
      //listTree(); 

     } 
    } 


    private void listTree() { 
     // TODO Auto-generated method stub 
     FileFilter filefilter = new FileFilter() { 
      public boolean accept(File file) { 
       return file.isFile(); 

      } 

     }; 
     FileFilter directoryfilter = new FileFilter() { 
      public boolean accept(File file) { 
       return file.isDirectory(); 
      } 
     }; 
     /* List of Directory */ 
     if (filepath.exists() && filepath.length() > 0) { 
      File[] directorylistArray = filepath.listFiles(directoryfilter); 
      for (File file : directorylistArray) { 
       directorylist.add(file); 
       directoryname.add(file.getName()); 
      } 

      ArrayAdapter<String> directoryadapter = new ArrayAdapter<String>(
        this, android.R.layout.simple_list_item_1, directoryname); 
      directorytree.setAdapter(directoryadapter); 
      File[] filelistArray = filepath.listFiles(filefilter); 

      for (File file : filelistArray) { 
       filelist.add(file); 
       myfilename.add(file.getName()); 

      } 

      ArrayAdapter<String> fileadapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, myfilename); 
      filetree.setAdapter(fileadapter); 
      Log.d(TAG, "List Created"); 

     } 







    } 





} 

和我的例外是

01-15 13:06:57.640: D/dalvikvm(804): GC_FOR_ALLOC freed 65K, 5% free 3223K/3364K, paused 25ms, total 28ms 
01-15 13:06:57.650: I/dalvikvm-heap(804): Grow heap (frag case) to 4.285MB for 1127536-byte allocation 
01-15 13:06:57.690: D/dalvikvm(804): GC_FOR_ALLOC freed 3K, 4% free 4321K/4468K, paused 35ms, total 35ms 
01-15 13:06:57.980: D/gralloc_goldfish(804): Emulator without GPU emulation detected. 
01-15 13:07:08.210: D/SelectFiles(804): /storage 
01-15 13:07:08.340: D/AndroidRuntime(804): Shutting down VM 
01-15 13:07:08.340: W/dalvikvm(804): threadid=1: thread exiting with uncaught exception (group=0xb2a77ba8) 
01-15 13:07:08.430: E/AndroidRuntime(804): FATAL EXCEPTION: main 
01-15 13:07:08.430: E/AndroidRuntime(804): Process: com.example.testmutilplefile, PID: 804 
01-15 13:07:08.430: E/AndroidRuntime(804): java.lang.IllegalStateException: Could not execute method of the activity 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.view.View$1.onClick(View.java:3823) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.view.View.performClick(View.java:4438) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.view.View$PerformClick.run(View.java:18422) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.os.Handler.handleCallback(Handler.java:733) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.os.Handler.dispatchMessage(Handler.java:95) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.os.Looper.loop(Looper.java:136) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.app.ActivityThread.main(ActivityThread.java:5001) 
01-15 13:07:08.430: E/AndroidRuntime(804): at java.lang.reflect.Method.invokeNative(Native Method) 
01-15 13:07:08.430: E/AndroidRuntime(804): at java.lang.reflect.Method.invoke(Method.java:515) 
01-15 13:07:08.430: E/AndroidRuntime(804): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
01-15 13:07:08.430: E/AndroidRuntime(804): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
01-15 13:07:08.430: E/AndroidRuntime(804): at dalvik.system.NativeStart.main(Native Method) 
01-15 13:07:08.430: E/AndroidRuntime(804): Caused by: java.lang.reflect.InvocationTargetException 
01-15 13:07:08.430: E/AndroidRuntime(804): at java.lang.reflect.Method.invokeNative(Native Method) 
01-15 13:07:08.430: E/AndroidRuntime(804): at java.lang.reflect.Method.invoke(Method.java:515) 
01-15 13:07:08.430: E/AndroidRuntime(804): at android.view.View$1.onClick(View.java:3818) 
01-15 13:07:08.430: E/AndroidRuntime(804): ... 11 more 
01-15 13:07:08.430: E/AndroidRuntime(804): Caused by: java.lang.NullPointerException 
01-15 13:07:08.430: E/AndroidRuntime(804): at com.example.testmutilplefile.MainActivity.listTree(MainActivity.java:118) 
01-15 13:07:08.430: E/AndroidRuntime(804): at com.example.testmutilplefile.MainActivity.onSdCardListener(MainActivity.java:91) 
01-15 13:07:08.430: E/AndroidRuntime(804): ... 14 more 
01-15 13:07:18.930: I/Process(804): Sending signal. PID: 804 SIG: 9 

請給我一個指導我怎麼能解決這個問題,我沒有得到它在此先感謝

+0

東西是空的檢查你的日誌是否正確引起:java.lang.NullPointerException – Nik

回答

1

filepath.listFiles(directoryfilter);在118行,所以你需要或在清單文件中添加權限返回NPE <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

0

你真正的問題是:

java.lang.NullPointerException: Attempt to get length of null array 

試試這個:

if(filepath != null) 
    if(filepath.exists() && filepath.length() > 0) 

使用文件引起的異常使用try ..趕上你的應用程序不會崩潰。

相關問題