Привет всем, я застрял с простым вызовом функции. Это мое первое приложение для 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
Это зависит от того, что вы пытаетесь сделать. Если вы пытаетесь перечислить файлы в каталоге, вот сообщение, которое описывает, как это сделать:
Из stacktrace кажется, что проблема заключается в том, что вы пытаетесь открыть каталог /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")
Абсолютного пути для файла не существует в папке Asset. Содержимое упаковано в файле APK.
File dir=new File("/assets");
Но вы можете получить входной поток в форме Asset.
AssetManager am = context.getAssets();
InputStream is = am.open("/assets/yourfile");
В строке 14 вы получили исключение nullpointer. Посмотрите, что это. Я думаю, что вы не создаете файл правильно.