2012-05-21 69 views
1

嗨每一個我堅持做一個簡單的函數調用。這是我第一個來自iPhone的Android應用程序。每次我做的東西在OnCreate()我的應用程序崩潰。我敢肯定,這個問題很簡單我在onCreate()內調用方法卡住()

public class AndroidReaderActivity extends Activity { 

    public void test(){ 
     File dir=new File("/assets"); 
     String[] listefichiers; 
     int i; 
     listefichiers = dir.list(); 
     for (i = 0; i < listefichiers.length; i++) { 
      System.out.println(listefichiers[i]); 
     } 
    } 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     test();   
    } 
} 

感謝你的幫助。

編輯: 這裏有貓LOG

05-15 19:52:55.710: E/AndroidRuntime(1956): FATAL EXCEPTION: main 
05-15 19:52:55.710: E/AndroidRuntime(1956): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.infotel/com.infotel.AndroidReaderActivity}: java.lang.NullPointerException 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.os.Looper.loop(Looper.java:137) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at dalvik.system.NativeStart.main(Native Method) 
05-15 19:52:55.710: E/AndroidRuntime(1956): Caused by: java.lang.NullPointerException 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at com.infotel.AndroidReaderActivity.test(AndroidReaderActivity.java:14) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at com.infotel.AndroidReaderActivity.onCreate(AndroidReaderActivity.java:23) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.Activity.performCreate(Activity.java:4465) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
05-15 19:52:55.710: E/AndroidRuntime(1956):  ... 11 more 
+0

程序給出了什麼錯誤? –

+0

把你自己的方法放在onCreate方法下面 –

+0

yiu是以一種錯誤的方式訪問資產文件夾..你將不得不使用像「file:/// ......」 –

回答

0

你得到的線14看看這是什麼一個NullPointerException異常。我認爲你沒有創建文件的權利。

1

從看來,問題是當你試圖訪問/資產目錄(位於內部的APK)

File dir=new File("/assets"); 

而且堆棧跟蹤,當你調用dir.list()給空指針,因爲dir無法實例化。

你究竟想要做什麼?你想訪問你的程序的資產目錄?

public void test(){ 
    AssetManager assetManager = null; 
    assetManager = getResources().getAssets(); 

    try { 
     // List main folder (/assets) content 
     for(String s : assetManager.list("")){ 
      Log.i("TestActivity", s); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

,導致:

您可以通過下面的代碼列出你的資產

05-11 16:55:08.555: I/TestActivity(13284): de 
05-11 16:55:08.555: I/TestActivity(13284): images 
05-11 16:55:08.555: I/TestActivity(13284): sounds 
05-11 16:55:08.555: I/TestActivity(13284): webkit 

您可能會名單後,每個目錄的給予assetManager.list(「德」的內容)

+0

我試圖列出目錄中的文件;) Thx – Bobyblanco

0

有文件存在於資產文件夾中沒有絕對路徑。內容打包在APK文件中。

File dir=new File("/assets"); 

但是你可以得到一個輸入流形式資產。

AssetManager am = context.getAssets(); 

     InputStream is = am.open("/assets/yourfile");