Java getString(R.string.MyString)在移动到新类时不工作';s法

Java getString(R.string.MyString)在移动到新类时不工作';s法,java,android,class,Java,Android,Class,这可能是一个很难回答的问题 我有一行代码,当它位于由AndroidStudio创建的类文件中,并且位于所用按钮的方法中时,可以使用,我们称之为MainActivity。电话是: File myNumbersFile = new File((Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + getString(R.string.my_numbers_file))).toString());

这可能是一个很难回答的问题

我有一行代码,当它位于由AndroidStudio创建的类文件中,并且位于所用按钮的方法中时,可以使用,我们称之为MainActivity。电话是:

File myNumbersFile = new File((Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + getString(R.string.my_numbers_file))).toString());
但是当我将它移动到我自己创建的另一个类文件时,只是为了分割代码,并将其放入自己的方法中,getString(R.string.my_numbers_file)部分停止工作

方法的调用很好,因为我可以返回在此行之前创建的值

logcat输出为:

07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ java.io.FileNotFoundException:/storage/simulated/0/Download/LottoDownload/my_numbers.txt:open failed:enoint(没有这样的文件或目录)
07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:420)
07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.io.FileInputStream。(FileInputStream.java:78)
07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.io.FileReader。(FileReader.java:42)
07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在au.com.acent.ash.basiclotochecker.variousMethods.ActainCurrentNumbersArray(variousMethods.java:74)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于au.com.acent.ash.basiclotochecker.CheckerActivity.populateButton(CheckerActivity.java:42)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:525)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view$1.onClick上(view.java:3809)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view.performClick上(view.java:4421)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view$PerformClick.run(view.java:17903)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Handler.handleCallback(Handler.java:730)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:92)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Looper.loop(Looper.java:213)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5225)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:525)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:741)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在dalvik.system.NativeStart.main(本机方法)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 原因:libcore.io.ErrnoException:open失败:enoint(没有这样的文件或目录)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在libcore.io.Posix.open中(本机方法)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在libcore.io.BlockGuardOs.open上(BlockGuardOs.java:110)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:404)
07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ ... 18更多

错误只发生在运行时,编译器允许它通过

请帮助我或给我指出另一个回答这个问题的问题。
谢谢

您可以使用
上下文访问任何字符串资源(即活动或服务)。在这种情况下,我通常只要求调用方在
上下文中传递。
i、 你应该使用

mContext.getString(R.string.my_numbers_file)
而不是

getString(R.string.my_numbers_file)
注意:
mContext
是调用类的活动的上下文。

是上下文类的方法。所以在类内部使用时需要上下文对象

使用
context.getString(R.string.my\u numbers\u文件)


您可以通过将context对象传递给使用此代码块的方法来实现这一点。 像


my_numbers.txt:open failed:enoint(没有这样的文件或目录)
是一个例外…在我看来,您的新类似乎在另一个包中,因此您尝试使用的文件路径不同。代码可能正常,但在运行时,找不到文件/storage/simulated/0/Download/LottoDownload/my_numbers.txt。请清理并重建您的项目。对不起,我粘贴了错误的logcat输出noobmaaate!就这样!为了调用我使用的
thatClass.yourmethod(this)
对吗?@Ash是的,你是完美的!最好使用
thatClass.yourmethod(ActivityName.this)
Ahh,确保发送正确活动的上下文?(哦,我喜欢被称为完美!)是的,这确保了即使您从任何内部类使用此代码块,也可以传递活动对象(作为上下文)。就像我们的回调(onclick侦听器等)。如果您从任何内部类使用
this
,则表示您正在传递该内部类的对象,而不是activi
public void yourMethod(Context context) {
     File myNumbersFile = new File((Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + context.getString(R.string.my_numbers_file))).toString());

}