Android资产加载

Android资产加载,android,eclipse,adt,assets,Android,Eclipse,Adt,Assets,仍然没有找到这个问题的答案。我一直在复制和粘贴一本书中的源代码,这是一个示例活动。不幸的是,当我运行活动时,它直接进入“catch”,这意味着“try”失败。调试时,我似乎在“AssetFileDescriptor descriptor=assetManager.openFd(“bloop.wav”)”处收到一个FileNotFound异常。我将文件放在项目的资产文件夹中,就像我对任何其他文件所做的一样(右键单击资产>新建>文件>选择要上载的文件)。正如我应该看到的那样,我在资产内部的eclip

仍然没有找到这个问题的答案。我一直在复制和粘贴一本书中的源代码,这是一个示例活动。不幸的是,当我运行活动时,它直接进入“catch”,这意味着“try”失败。调试时,我似乎在“AssetFileDescriptor descriptor=assetManager.openFd(“bloop.wav”)”处收到一个FileNotFound异常。我将文件放在项目的资产文件夹中,就像我对任何其他文件所做的一样(右键单击资产>新建>文件>选择要上载的文件)。正如我应该看到的那样,我在资产内部的eclipse层次结构中看到了该文件。还有什么我没做的吗?我需要在清单文件或其他文件中声明资产吗?非常感谢您的帮助。谢谢

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView textView = new TextView(this);
    setContentView(textView);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    mediaPlayer = new MediaPlayer();
    try {
        AssetManager assetManager = getAssets();
        AssetFileDescriptor descriptor = assetManager.openFd("bloop.wav");//This is the exception
        mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(),descriptor.getLength());
        mediaPlayer.prepare();
        mediaPlayer.setLooping(true);
    } catch (IOException e) {
        Log.d("TAG", "Error was this  ", e);
        mediaPlayer = null;
    }
}
这是我的错误,对于那些想要完整日志的人来说:

Error was this  
java.io.FileNotFoundException: bloop.wav
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:332)
at com.example.secondproject.MediaPlayerTest.onCreate(MediaPlayerTest.java:24)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

请检查Eclipse是否确实将您的文件添加到了项目中,并且该文件名为“bloop.wav”。使用文件
explorer/finder/etc
进入项目文件夹,查看它是否在那里

还要查看Eclipse创建的
.apk
(应该在项目的
/bin
文件夹中)

将文件扩展名更改为
.zip
,然后查看内部。如果wav不存在,则可能是
/assets
文件夹未添加到构建路径(在Eclipse中,转到
文件>属性>Java构建路径>源代码
(选项卡),如果
/assets
文件夹不存在,则可能在该文件夹上执行“链接源代码”)

编辑:

以下代码的输出是什么

public void onCreate(Bundle savedInstanceState) {
    /.../
    try {
        AssetManager assetManager = getAssets();
        String[] list = assetManager.list("");
        for (String s : list) {
            System.out.println(s);
        }
    } catch (IOException e) {
        Log.d("TAG", "Error was this  ", e);
    }
}

终于!!我发现了这个问题。非常感谢@Hawkeye为您提供的帮助,但问题在于文件在资产文件夹中的放置方式。通常我会进入file>new>file>advanced(从磁盘链接),以便将文件放置在我的工作区中,就像我对其他java程序所做的那样。由于某些原因,android应用程序无法识别这一点,我不得不转到计算机上的文件,点击“复制”,然后进入我的工作区,将文件的物理副本“粘贴”到资产文件夹中。出于某种原因,上载此庄园中的文件会导致在.apk文件中创建“资产”文件夹(如果使用链接方法,则文件将位于.apk中,但资产文件夹将不在那里!)。这个解决方案没有发布在网上的任何其他地方,我必须自己发现这一点。我希望这能够帮助其他人。

我添加了项目>属性>Java构建路径>源代码>添加文件夹:(资产)。资产现在位于构建路径中,打开新创建的.apk文件,现在会在其中显示bloop.wav(以前没有)。然而,尽管如此努力,我还是犯了同样的错误。这个问题还有其他解决方案吗?我在WindowsVista(x64)上运行,在EclipseJuno上安装了最新版本的ADT。我正在模拟器上运行。我尝试了以上所有方法,但都没有效果