【问题标题】:I'm stuck with calling method within onCreate()我坚持使用 onCreate() 中的调用方法
【发布时间】:2012-05-21 12:24:27
【问题描述】:

大家好,我一直在做一个简单的函数调用。这是我来自 iPhone 的第一个 android 应用程序。每次我在 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();        
    }
}

感谢您的帮助。

编辑: 这是猫日志

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

【问题讨论】:

  • 程序出现什么错误?
  • 获得访问文件的权限?
  • 把你自己的方法放在onCreate方法下面
  • yiu 以错误的方式访问资产文件夹..您将不得不使用“file:///......”之类的东西

标签: android


【解决方案1】:

这取决于你想要做什么。如果您尝试列出目录中的文件,这里有一篇文章描述了如何做到这一点:

How to list files in an android directory?

【讨论】:

    【解决方案2】:

    从堆栈跟踪看来,问题出在您尝试访问 /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")列出每个目录的内容

    【讨论】:

    • 我正在尝试列出目录中的文件;)谢谢
    【解决方案3】:

    你在第 14 行得到了一个空指针异常。看看这是什么。我认为您没有正确创建文件。

    【讨论】:

      【解决方案4】:

      资产文件夹中不存在文件的绝对路径。内容打包在APK文件中。

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

      但是你可以从 Asset 获取输入流。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        相关资源
        最近更新 更多