嗨,每一个我都坚持做一个简单的函数调用。这是我的第一个Android应用程序,我来自iPhone。每次我在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();
}
}
感谢您的帮助。
编辑: 这是Cat 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 :(得分:1)
从堆栈跟踪看来问题是当你试图访问/ assets目录(它位于APK内部)时
File dir=new File("/assets");
当你调用dir.list()时给出NullPointer,因为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(“de”)
来列出每个目录的内容答案 1 :(得分:1)
这取决于你想要做什么。如果您尝试列出目录中的文件,这里有一篇文章描述了如何执行此操作:
答案 2 :(得分:0)
你在第14行得到了一个nullpointerexception。看看这是什么。我认为你没有正确创建文件。
答案 3 :(得分:0)
Asset文件夹中没有文件的绝对路径。内容打包在APK文件中。
File dir=new File("/assets");
但您可以从资产中获取输入流。
AssetManager am = context.getAssets();
InputStream is = am.open("/assets/yourfile");