gpt4 book ai didi

java - Android 库中的 string.xml

转载 作者:行者123 更新时间:2023-12-01 04:20:32 24 4
gpt4 key购买 nike

我正在一个 Android 应用程序库中工作,我正在尝试使用 string.xml 为用户在关键点中添加一些消息。

我的问题是,当我在 Android 测试应用程序中测试库以查看工作流程并达到显示一条发生 fatal error 和应用程序崩溃的消息(在本例中是在日志中)的位置时。

我认为与测试应用程序中的 string.xml 发生冲突,并覆盖我在库中的 string.xml。这可以通过某种方式解决吗?还是我强制使用测试应用程序 string.xml 来使用库进行锻炼?

我是否必须让我的类从 Activity 扩展才能使用 getResources()?或者是任何其他方式来访问 string.xml,我将保留代码和日志。

代码

public void createCertificateLogTxt(){
File certificado = new File (this.KeyFolderContainer.getAbsoluteFile(),"certificadoLog.txt");
if(!certificado.exists()){
try {
certificado.createNewFile();
this.CertificadoLog = certificado;
Log.i(LOGFILE, "certificadoLog.txt Creado"+ this.getResources().getString(R.string.app_name));
} catch (IOException e) {
Log.e(LOGFILE, "No se puede crear certificadoLog.txt"+ R.string.LOGFILE, e);
}
}

日志

09-14 02:41:24.032: I/Choreographer(23748): Skipped 105 frames!  The application may be doing too much work on its main thread.
09-14 02:41:25.593: D/AndroidRuntime(23748): Shutting down VM
09-14 02:41:25.593: W/dalvikvm(23748): threadid=1: thread exiting with uncaught exception (group=0x414c4700)
09-14 02:41:25.753: E/AndroidRuntime(23748): FATAL EXCEPTION: main
09-14 02:41:25.753: E/AndroidRuntime(23748): java.lang.IllegalStateException: Could not execute method of the activity
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.view.View$1.onClick(View.java:3633)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.view.View.performClick(View.java:4240)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.view.View$PerformClick.run(View.java:17721)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.os.Handler.handleCallback(Handler.java:730)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.os.Handler.dispatchMessage(Handler.java:92)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.os.Looper.loop(Looper.java:137)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.app.ActivityThread.main(ActivityThread.java:5103)
09-14 02:41:25.753: E/AndroidRuntime(23748): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 02:41:25.753: E/AndroidRuntime(23748): at java.lang.reflect.Method.invoke(Method.java:525)
09-14 02:41:25.753: E/AndroidRuntime(23748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-14 02:41:25.753: E/AndroidRuntime(23748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-14 02:41:25.753: E/AndroidRuntime(23748): at dalvik.system.NativeStart.main(Native Method)
09-14 02:41:25.753: E/AndroidRuntime(23748): Caused by: java.lang.reflect.InvocationTargetException
09-14 02:41:25.753: E/AndroidRuntime(23748): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 02:41:25.753: E/AndroidRuntime(23748): at java.lang.reflect.Method.invoke(Method.java:525)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.view.View$1.onClick(View.java:3628)
09-14 02:41:25.753: E/AndroidRuntime(23748): ... 11 more
09-14 02:41:25.753: E/AndroidRuntime(23748): Caused by: java.lang.NullPointerException
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
09-14 02:41:25.753: E/AndroidRuntime(23748): at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
09-14 02:41:25.753: E/AndroidRuntime(23748): at com.idyseg.movilsecure.files.KeyFileManager.createCertificateLogTxt(KeyFileManager.java:76)
09-14 02:41:25.753: E/AndroidRuntime(23748): at com.idyseg.movilsecure.MSMasterControler.<init>(MSMasterControler.java:34)
09-14 02:41:25.753: E/AndroidRuntime(23748): at com.idyseg.librerytester.MainActivity.Conector(MainActivity.java:33)
09-14 02:41:25.753: E/AndroidRuntime(23748): ... 14 more
09-14 02:41:28.253: I/Process(23748): Sending signal. PID: 23748 SIG: 9

最佳答案

我认为问题 - 或者至少是问题的一部分 - 是你试图在 Activity 的构造函数中调用 this.getResources() ,如堆栈中的这一行所示跟踪:

09-14 02:41:25.753: E/AndroidRuntime(23748):    at com.idyseg.movilsecure.MSMasterControler.<init>(MSMasterControler.java:34)

据我所知,在调用 Activity 的 onCreate 方法之前,资源不可用。尝试将对 createCertificateLogTxt 的调用移至 Activity 的 onCreate 方法。

此外,如果您将 KeyFileManager 类定义为 Activity,以便您可以在其上调用 getResources,那么这也是问题的一部分:如果它没有被用作作为 Activity(即,如果它不使用标准 Activity 生命周期方法),那么资源将再次无法通过此类获得。在这种情况下,您需要修改 KeyFileManager.createCertificateLogTxt() 以将主 Activity 的上下文作为参数传递:

KeyFileManager.createCertificateLogTxt(Context context) {
//....
Log.i(LOGFILE, "certificadoLog.txt Creado"+ context.getResources().getString(R.string.app_name));
}

顺便说一句:虽然这并不重要,但这行:

        Log.e(LOGFILE, "No se puede crear certificadoLog.txt"+ R.string.LOGFILE, e);

我觉得很可疑;你不想要这样的东西吗?

        Log.e(LOGFILE, "No se puede crear certificadoLog.txt " + getString(R.string.LOGFILE), e);

关于java - Android 库中的 string.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com