Android 引用string.xml中的资源时出错

Android 引用string.xml中的资源时出错,android,Android,当我从string.xml引用资源时,我得到一个Java运行时异常。我在Android开发者网站上读到了“字符串资源”和“访问资源”,但仍然不知道为什么这些是错误的。非常感谢你的帮助 在string.xml中: <string name="fAudioRecorderDir">AudioRecorder</string> 来自Logcat## E/AndroidRuntime(14597):致命异常:main E/AndroidRuntime(14597):ja

当我从string.xml引用资源时,我得到一个Java运行时异常。我在Android开发者网站上读到了“字符串资源”和“访问资源”,但仍然不知道为什么这些是错误的。非常感谢你的帮助

在string.xml中:

    <string name="fAudioRecorderDir">AudioRecorder</string>
来自Logcat##
E/AndroidRuntime(14597):致命异常:main
E/AndroidRuntime(14597):java.lang.RuntimeException:无法实例化活动组件信息{com.medikin.android.dictaphone/com.medikin.android.dictaphone.Upload}:java.lang.NullPointerException
E/AndroidRuntime(14597):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
E/AndroidRuntime(14597):位于android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
E/AndroidRuntime(14597):位于android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
E/AndroidRuntime(14597):位于android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
E/AndroidRuntime(14597):位于android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
E/AndroidRuntime(14597):位于android.widget.TabHost.setCurrentTab(TabHost.java:326)
E/AndroidRuntime(14597):位于android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
E/AndroidRuntime(14597):位于android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
E/AndroidRuntime(14597):在android.view.view.performClick(view.java:2485)
E/AndroidRuntime(14597):在android.view.view$PerformClick.run(view.java:9080)
E/AndroidRuntime(14597):位于android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(14597):位于android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(14597):位于android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(14597):位于android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(14597):位于java.lang.reflect.Method.Invokenactive(本机方法)
E/AndroidRuntime(14597):位于java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(14597):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(14597):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(14597):位于dalvik.system.NativeStart.main(本机方法)
E/AndroidRuntime(14597):由以下原因引起:java.lang.NullPointerException
E/AndroidRuntime(14597):位于android.content.ContextWrapper.getResources(ContextWrapper.java:80)
E/AndroidRuntime(14597):位于com.medikin.android.dictaphone.Upload(Upload.java:26)
E/AndroidRuntime(14597):位于java.lang.Class.newInstanceImpl(本机方法)
E/AndroidRuntime(14597):位于java.lang.Class.newInstance(Class.java:1409)
E/AndroidRuntime(14597):位于android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(14597):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
E/AndroidRuntime(14597):。。。还有18个
W/ActivityManager(68):强制完成活动com.medikin.android.dictaphone/.dictaphone

我在这里猜测,但我还是要尝试一下(您应该添加更多的代码):

  • GetResources在尝试获取其上下文时失败,我认为这是因为您的类没有从上下文中获取它(可能是一个单独的帮助器类)

  • GetResources需要有效的上下文才能找到正确的res/目录

两种选择:

  • 将这个类作为您的活动之一的子类,然后再试一次

  • 将上下文作为包含第26行的方法的参数传递

即:

public void myMethod(Context cxt){
   String extStorage = Environment.getExternalStorageDirectory().getPath();
   String AudioRecorderDir=cxt.getResources().getString(R.string.fAudioRecorderDir);
   Log.d("SanityCheck","extStorage: "+extStorage+" audioRecoderDir: "+AudioRecorderDir);
   String homeDir=extStorage+"/"+AudioRecorderDir+"/";
   //etc
}
从您的活动中可以这么说:

myObj.myMethod(this);

看起来不错。请尝试
Log.d(homeDir)
以确保,您能指出异常出现的位置和异常是什么吗?(如果您不知道:只需在shell中启动
adb logcat
)好的,下面是我从logcat得到的信息:很抱歉弄错了。Logcat现在和代码在一起了。它似乎是Upload.java第26行的NullPointerException。这就是你问题中的那一行吗?是的,问题中的Java代码是第26行。@user978879你试过我的解决方案了吗?
public void myMethod(Context cxt){
   String extStorage = Environment.getExternalStorageDirectory().getPath();
   String AudioRecorderDir=cxt.getResources().getString(R.string.fAudioRecorderDir);
   Log.d("SanityCheck","extStorage: "+extStorage+" audioRecoderDir: "+AudioRecorderDir);
   String homeDir=extStorage+"/"+AudioRecorderDir+"/";
   //etc
}
myObj.myMethod(this);