2014-07-08 32 views
0

這可能是一個noob問題。getString(R.string.MyString)在移動到新類的方法時不起作用

我有一行代碼在Android Studio創建的類文件中工作,並且在所使用的按鈕的方法內,我們稱其爲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/emulated/0/Download/LottoDownload/my_numbers.txt: open failed: ENOENT (No such file or directory) 07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:420) 07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:78) 07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.io.FileReader.<init>(FileReader.java:42) 07-08 20:52:48.646 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.variousMethods.obtainCurrentNumbersArray(variousMethods.java:74) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.CheckerActivity.populateButton(CheckerActivity.java:42) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$1.onClick(View.java:3809) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View.performClick(View.java:4421) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$PerformClick.run(View.java:17903) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:730) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Looper.loop(Looper.java:213) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5225) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at 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﹕ at 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﹕ at dalvik.system.NativeStart.main(Native Method) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.Posix.open(Native Method) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:404) 07-08 20:52:48.656 5359-5359/au.com.acent.ash.basiclottochecker W/System.err﹕ ... 18 more

錯誤只發生在運行時,編譯器允許它通過。

請幫助或指出我回答這個問題的另一個問題。 謝謝

+0

'my_numbers.txt:打開失敗:ENOENT(沒有這樣的文件或目錄)'是個例外...... –

+0

我看來,像你的新類是另一個軟件包,從而路徑您嘗試使用的文件不同 – Stultuske

+0

代碼可能正常,但在運行時找不到文件/storage/emulated/0/Download/LottoDownload/my_numbers.txt。 – JamesB

回答

1

getString()是Context類的方法。所以你需要在你的課堂內使用上下文對象。

使用context.getString(R.string.my_numbers_file)


您可以通過傳遞上下文對象,以使這一代碼塊,您正在使用的方法去做。 像

public void yourMethod(Context context) { 
    File myNumbersFile = new File((Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + context.getString(R.string.my_numbers_file))).toString()); 

} 
+0

MAAAAAATE!就是這樣!要調用我使用'thatClass.yourmethod(this)'的方法'對嗎? – Ash

+0

@Ash是的,你可以。 –

+0

@Ash是的你是完美的!更好的辦法是使用'thatClass.yourmethod(ActivityName.this)' –

0

您可以訪問任何字符串資源是與Context(即活動或服務)。我通常在這種情況下完成的,只是要求調用者通過context。 即你應該使用的

mContext.getString(R.string.my_numbers_file) 

代替

getString(R.string.my_numbers_file) 

注:mContext是活動的,從你在哪裏調用類的上下文。

相關問題