1

誰かがこの問題を解決できるなら、私はとても感謝しています。

AlarmManager を使用してサービスを開始するアクティビティがあり、正常に動作します。新しいサービス (変更されたコピー) を作成しましたが、次のエラーが発生しています: java.lang.RuntimeException: Unable to start service...with Intent {...(has extras) }: java.lang.ClassCastException

通常の問題と思われるため、多くの検索を行い、マニフェストを何度も確認しました。両方のサービスが宣言されており、アプリケーション タグ内にあり、完全にスコープされています。私が見たほとんどの例は 1 つのサービスのみを参照しているため、念のため、マニフェストで 2 つのサービスをコーディングするいくつかの異なる方法を試しましたが、以下のもの以外の有効なバージョンは見つかりませんでした。

問題は、新しいサービスが別のパッケージ (同じアプリ内) にあるという事実にあると想定しているため、インテントを作成するためにいくつかの方法を試しました。

インテント フィルターとカスタム アクションも試しましたが (下部を参照)、同じエラーが発生しました。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="couk.jit.currencycheck1"
android:versionCode="1"
android:versionName="1.0.1" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="couk.jit.currencycheck1.MainMenu"
...        
</activity>

    <service
        android:name="couk.jit.currencycheck1.ServiceClass"
        android:enabled="true" />
    <service
        android:name="couk.jit.currencycheck1.xml.ServiceClassXML"
        android:enabled="true" />

    <activity
        android:name="couk.jit.currencycheck1.HistoryActivity"
        android:label="@string/title_activity_history" >
    </activity>
</application>
</manifest>

このバージョンのアクティビティ コードでは、エラーが発生します。

import couk.jit.currencycheck1.xml.ServiceClassXML;
...
Intent intent;
if (dataSource == 0 || dataSource == 1)
intent = new Intent(this, ServiceClass.class);
else {
intent = new Intent(this, ServiceClassXML.class);   //gives error
}
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP,
scheduleStart.getTimeInMillis(), 60 * 1000, pintent);

これら 2 つのバージョンではエラーは発生しませんが、サービスに到達していません。ログメッセージなし、アクションなし。(a)

//intent = new Intent(this, ServiceClassXML.class); //gives error
intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML"); 

(ロ)

//intent = new Intent(this, ServiceClassXML.class); //gives error
//intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML");
intent = new Intent();
intent.setComponent(new    ComponentName("couk.jit.currencycheck1.xml","ServiceClassXML.java"));

これも試してみましたが、同じエラーが発生します。

intent = new Intent(context, ServiceClassXML.class);

サービスクラス

public class ServiceClassXML extends Service {
SharedPreferences prefs = null;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("DBG", "ServiceClassXML started");
    prefs =   PreferenceManager.getDefaultSharedPreferences(this.getApplication().getApplicationContext());
    boolean run = prefs.getBoolean("running", false);
    if (!run)
        stopSelf();
    else {
        new GetXMLTask(this.getApplication().getApplicationContext(),  true).execute("");
    }
    return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
}

インテント フィルタとカスタム アクションを試してください。マニフェスト

    <service
        android:name="couk.jit.currencycheck1.xml.ServiceClassXML"
        android:enabled="true" >
        <intent-filter>
        <action android:name="couk.jit.currencycheck1.xml.DO_CUSTOM_ACTION"/>
        </intent-filter>
    </service>

アクティビティ

//intent = new Intent(this, ServiceClassXML.class); 
//intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML");
//intent = new Intent();
//intent.setComponent(new  ComponentName("couk.jit.currencycheck1.xml","ServiceClassXML.java")); //service not reached
intent = new Intent("couk.jit.currencycheck1.xml.DO_CUSTOM_ACTION");
intent.setClass(this, ServiceClassXML.class);

ログキャット

09-03 16:56:32.344: E/AndroidRuntime(763): FATAL EXCEPTION: main
09-03 16:56:32.344: E/AndroidRuntime(763): java.lang.RuntimeException: Unable to start  service couk.jit.currencycheck1.xml.ServiceClassXML@4602fc38 with Intent { flg=0x4 cmp=couk.jit.currencycheck1/.xml.ServiceClassXML (has extras) }: java.lang.ClassCastException: android.app.Application
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.app.ActivityThread.access$3600(ActivityThread.java:125)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.os.Looper.loop(Looper.java:123)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-03 16:56:32.344: E/AndroidRuntime(763):  at java.lang.reflect.Method.invokeNative(Native Method)
09-03 16:56:32.344: E/AndroidRuntime(763):  at java.lang.reflect.Method.invoke(Method.java:521)
09-03 16:56:32.344: E/AndroidRuntime(763):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-03 16:56:32.344: E/AndroidRuntime(763):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-03 16:56:32.344: E/AndroidRuntime(763):  at dalvik.system.NativeStart.main(Native Method)
09-03 16:56:32.344: E/AndroidRuntime(763): Caused by: java.lang.ClassCastException: android.app.Application
09-03 16:56:32.344: E/AndroidRuntime(763):  at couk.jit.currencycheck1.xml.GetXMLTask.<init>(GetXMLTask.java:52)
09-03 16:56:32.344: E/AndroidRuntime(763):  at couk.jit.currencycheck1.xml.ServiceClassXML.onStartCommand(ServiceClassXML.java:24)
09-03 16:56:32.344: E/AndroidRuntime(763):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
09-03 16:56:32.344: E/AndroidRuntime(763):  ... 10 more
4

1 に答える 1

0

弾丸を噛み、パッケージを1つにマージしました-それでもエラーが発生しました! 問題の原因となっている行はわかっていますが (理由はまだわかりません)、この質問は適切な質問ではなく、人々の時間を無駄にしたくないため、この質問を終了します。

于 2013-09-04T09:43:34.600 に答える