1

私はAndroidアプリのライブラリで作業しています.string.xmlを使用して、ユーザーの重要なポイントにメッセージを入れようとしています.

私の問題は、Android テスト アプリでライブラリをテストしてワークフローを確認し、致命的なエラーとアプリのクラッシュが発生するメッセージ (この場合はログ) を表示するポイントに到達したときです。

string.xmlテストアプリの と衝突してstring.xml、ライブラリにある を上書きすることを考えています。これは何らかの方法で解決できますか、それともテスト アプリ string.xml を強制的に使用してライブラリでワークアウトしましたか??

getResources() を使用するためにクラスを Activity から拡張する必要がありますか? または、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
4

1 に答える 1

0

問題 (または少なくともその一部) はthis.getResources()、スタック トレースの次の行に示されているように、Activity のコンストラクター中に呼び出そうとしていることだと思います。

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

私の知る限り、リソースはアクティビティのonCreateメソッドが呼び出されるまで利用できません。呼び出しをcreateCertificateLogTxtアクティビティのonCreateメソッドに移動してみてください。

KeyFileManagerまた、クラスを呼び出すためだけにクラスをアクティビティとして定義した場合getResources、それも問題の一部です:アクティビティとして使用されていない場合 (つまり、標準のアクティビティ ライフサイクル メソッドを使用していない場合) )、この場合も、このクラスを介してリソースを使用できません。この場合、KeyFileManager.createCertificateLogTxt()メイン アクティビティのコンテキストをパラメーターとして渡すように変更します。

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);
于 2013-09-23T16:49:22.207 に答える