2017-10-13 9 views
0

私は検索していますが、アプリで起こっていることに似たものは見つかりません。私はIntentServiceを使ってファイルを読み込んだり、書き出したりするアプリケーションを持っていますが、他のアプリケーションから互換性のあるファイルを選択してアプリを起動した後に画面を回転させると、アプリケーションがクラッシュします。ファイルを選択する前に既に実行されていた場合はクラッシュしません。何が起きる可能性があり、どのように解決するかというアイデアはまったくありません。 エラーは、私が関連する可能性がどのような情報を知っているが、ここではエラーになりませんので、奇妙であるので:他のアプリのインテントから開始された場合にのみ、画面の回転でアプリがクラッシュする

java.lang.RuntimeException: 
Unable to instantiate activity ComponentInfo{com.txintxe.dev.xxx/com.txintxe.dev.xxx.services.ExportImportService}: java.lang.ClassCastException: com.txintxe.dev.xxx.services.ExportImportService cannot be cast to android.app.Activity 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2586) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) 
                     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4556) 
                     at android.app.ActivityThread.-wrap19(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:154) 
                     at android.app.ActivityThread.main(ActivityThread.java:6186) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 
                    Caused by: java.lang.ClassCastException: com.txintxe.dev.saltea.services.ExportImportService cannot be cast to android.app.Activity 
                     at android.app.Instrumentation.newActivity(Instrumentation.java:1079) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2576) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751)  
                     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4556)  
                     at android.app.ActivityThread.-wrap19(ActivityThread.java)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:154)  
                     at android.app.ActivityThread.main(ActivityThread.java:6186)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)  

マニフェストの(と思う)関連部分:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".ListActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTop" 
     android:theme="@style/AppTheme.NoActionBar"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

     <intent-filter> 
      <data 
       android:scheme="content" 
       android:mimeType="*/*" 
       android:host="*" 
       /> 
      <action android:name="android.intent.action.VIEW" /> 
      <action android:name="android.intent.action.EDIT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

     <intent-filter> 
      <data 
       android:scheme="file" 
       android:mimeType="*/*" 
       android:pathPattern=".*\\.xxx" 
       android:host="*"/> 
      <action android:name="android.intent.action.VIEW" /> 
      <action android:name="android.intent.action.EDIT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 

private void doImportRecipe() { 
    Intent intent = getIntent(); 
    intent.setAction(ExportImportService.ACTION_IMPORT); 
    intent.setClass(getApplicationContext(), ExportImportService.class); 
    startService(intent); 
} 

そして最後にIntentServiceにインテントを処理するメソッド:

私はIntentServiceを呼び出すために使用するアクティビティ内の方法
protected void onHandleIntent(Intent intent) { 
    if (intent != null) { 
     final String action = intent.getAction(); 
     final ArrayList<String> xxxKeys = intent.getStringArrayListExtra(EXTRA_XXXKEYS); 
     switch(action) { 
      case ACTION_IMPORT: 
       final Uri xxxPath = intent.getData(); 
       handleActionImport(xxxPath); 
       break; 
      case ACTION_EXPORT: 
       handleActionExport(xxxKeys); 
       break; 
      case ACTION_SHARE: 
       handleActionShare(xxxKeys); 
       break; 
     } 
    } 
} 

解決する必要がある場合は、投稿する際に問題はありませんが、アプリケーションがインポート操作から開始されてから回転されない限り、マニフェストで

+0

あなたの問題は 'によって引き起こされる:java.lang.ClassCastExceptionが:com.txintxe.dev.saltea.services.ExportImportServiceはandroid.app.Activity'にキャストすることはできません。あなたはチェックしてください。さらにコードを表示する。 – KeLiuyue

+0

@KeLiuyueはい、私は知っていますが、問題は私のコードのどこにもIntentServiceを私が知る限りのアクティビティとしてキャストしようとしていないことです。アプリが別のアプリから起動された場合、アプリがバックグラウンドであった場合に画面を回転させるとクラッシュしてしまい、クラッシュすることはありません。 – TXinTXe

+0

どこでも 'ExportImportService'が見つかりませんでした。 – KeLiuyue

答えて

0

[OK]を起動する

<service 
    android:name=".MyIntentService" 
    android:exported="false" /> 

そして、あなたのメインクラスであなたの意思サービスクラスを定義します。動作するようになりましたようだ、との問題ではなく、ここで新しいものを作成するのと同じ意図を再利用していた:

private void doImportRecipe(String data) { 
    Intent intent = new Intent(); 
    intent.setAction(ExportImportService.ACTION_IMPORT); 
    intent.setClass(getApplicationContext(), ExportImportService.class); 
    intent.setData(Uri.parse(data)); 
    startService(intent); 
} 

私はそれが本当に機能するようになりましたことを確認するために、それをテストしておこう、というあなたにみんなに感謝します答えることを試みるために時間を要した:)

1

は、サービス

Intent intent = new Intent(context, MyIntentService.class); 
      intent.setAction("your_action"); 
      startService(intent); 
+0

ええ、横方向に別のxmlを読み込む必要がありますので、これは不可能です(そして、別のアプリからファイルをクリックして起動したとき)。 – TXinTXe

+0

ExportImportService.classはサービスまたはアクティビティですか? – Aj121

+0

IntentService @ Aj121です – TXinTXe

関連する問題