Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ClassCastException正在服务中启动AsyncTask_Android_Android Asynctask - Fatal编程技术网

Android ClassCastException正在服务中启动AsyncTask

Android ClassCastException正在服务中启动AsyncTask,android,android-asynctask,Android,Android Asynctask,我在启动一个启动AsyncTask的服务时遇到了这个错误,但我还有另一个类似的服务和AsyncTask可以正常工作。这两个服务都在清单中声明。 如果有人能提出问题所在,我将不胜感激。在大量阅读之后,我认为这与AsyncTask的结构/参数有关,因此我尝试了一些变化,但没有任何乐趣,但我不确定我是否朝着正确的方向前进。 我没有在任何地方显式扩展应用程序 09-04 09:13:46.444: E/AndroidRuntime(1190): FATAL EXCEPTION: main 09-04 0

我在启动一个启动AsyncTask的服务时遇到了这个错误,但我还有另一个类似的服务和AsyncTask可以正常工作。这两个服务都在清单中声明。 如果有人能提出问题所在,我将不胜感激。在大量阅读之后,我认为这与AsyncTask的结构/参数有关,因此我尝试了一些变化,但没有任何乐趣,但我不确定我是否朝着正确的方向前进。 我没有在任何地方显式扩展应用程序

09-04 09:13:46.444: E/AndroidRuntime(1190): FATAL EXCEPTION: main
09-04 09:13:46.444: E/AndroidRuntime(1190): java.lang.RuntimeException: Unable to start service couk.jit.currencycheck1.ServiceClassXML@4602fc20 with Intent { flg=0x4 cmp=couk.jit.currencycheck1/.ServiceClassXML (has extras) }: java.lang.ClassCastException: android.app.Application
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.app.ActivityThread.access$3600(ActivityThread.java:125)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.os.Looper.loop(Looper.java:123)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at java.lang.reflect.Method.invokeNative(Native Method)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at java.lang.reflect.Method.invoke(Method.java:521)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at dalvik.system.NativeStart.main(Native Method)
09-04 09:13:46.444: E/AndroidRuntime(1190): Caused by: java.lang.ClassCastException: android.app.Application
09-04 09:13:46.444: E/AndroidRuntime(1190):     at couk.jit.currencycheck1.GetXMLTask.<init>(GetXMLTask.java:52)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at couk.jit.currencycheck1.ServiceClassXML.onStartCommand(ServiceClassXML.java:24)
09-04 09:13:46.444: E/AndroidRuntime(1190):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
09-04 09:13:46.444: E/AndroidRuntime(1190):     ... 10 more
这是一项有效的任务

public class AsyncNetworkConnection extends AsyncTask<String, String, String> {

public AsyncNetworkConnection(Context ct, boolean asService) {
...
}

@Override
protected void onPostExecute(String result) {
...
}

protected String doInBackground(String... arg0) {
String result = null;
...
results = fetchHTML(arg0[0]);
return results;
}

private String fetchHTML(String urlStr) throws URISyntaxException,
        ClientProtocolException, IOException, Exception {
String result = null;
...
return result;
}

}
给出错误的AsyncTask的基础知识

public class GetXMLTask extends AsyncTask<String, Void, List<RateData>> {

public GetXMLTask(Context ct, boolean asService) {
    this.context = (Activity) ct;   //as context can be cast to activity
    prefs = PreferenceManager.getDefaultSharedPreferences(context);
    dataSource = prefs.getInt("srcs", 0);
    runAsService = asService;
    restoredTextFrom = prefs.getString("fromCurr", null);
    restoredTextTo = prefs.getString("toCurr", null);
}

@Override
protected void onPostExecute(List<RateData> rates) {
...
}

@Override
protected List<RateData> doInBackground(String... urls) {
xml = getXmlFromUrl(url);
...
}

private String getXmlFromUrl(String urlString) {
...
return output.toString();
}
}
公共类GetXMLTask扩展了AsyncTask{
公共GetXMLTask(上下文ct、布尔AService){
this.context=(Activity)ct;//as context可以强制转换为Activity
prefs=PreferenceManager.GetDefaultSharedReferences(上下文);
dataSource=prefs.getInt(“srcs”,0);
RUNASERVICE=asService;
restoredTextFrom=prefs.getString(“fromCurr”,null);
restoredTextTo=prefs.getString(“toCurr”,null);
}
@凌驾
受保护的void onPostExecute(列出费率){
...
}
@凌驾
受保护列表doInBackground(字符串…URL){
xml=getXmlFromUrl(url);
...
}
私有字符串getXmlFromUrl(字符串urlString){
...
返回output.toString();
}
}
舱单包括:

<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"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service
        android:name="couk.jit.currencycheck1.ServiceClass"
        android:enabled="true" />
    <service
        android:name="couk.jit.currencycheck1.ServiceClassXML"
        android:enabled="true" />
...
</application>

...

您正在传递应用程序上下文

new GetXMLTask(this.getApplication().getApplicationContext(), true).execute("abc");
您正在将其转换为活动上下文
this.context=(Activity)ct

这是给你的例外

Caused by: java.lang.ClassCastException: android.app.Application

您正在传递中的应用程序上下文

new GetXMLTask(this.getApplication().getApplicationContext(), true).execute("abc");
您正在将其转换为活动上下文
this.context=(Activity)ct

这是给你的例外

Caused by: java.lang.ClassCastException: android.app.Application

您应该根据上下文设置变量

 Context ctx = getApplicationContext();
然后用这个ctx进入

 new GetXMLTask(ctx, true).execute("abc");

您应该根据上下文设置变量

 Context ctx = getApplicationContext();
然后用这个ctx进入

 new GetXMLTask(ctx, true).execute("abc");

什么是
GetXMLTask.java:52
,该行尝试使用
Application
,但它不是。我假设这是我的AsyncTask。我想知道
GetXMLTask.java
中的第52行是:)您没有发布该行。它是构造函数的一部分。您的起始服务行在哪里?我建议您替换xml=getXmlFromUrl(url);使用xml=getXmlFromUrl(url[0]);如果url不是硬编码字符串,而tryWhat是
GetXMLTask.java:52
,则该行尝试使用
Application
,但它不是。我假设这是我的异步任务。我想知道
GetXMLTask.java
中的第52行是什么:)您没有发布该行。它是构造函数的一部分。您的起始服务行在哪里?我建议您替换xml=getXmlFromUrl(url);使用xml=getXmlFromUrl(url[0]);如果url不是硬编码字符串,则使用tryThanks-Ritesh。不幸的是,另一个人的解决方案最先到达。谢谢Ritesh。不幸的是,另一个人的解决方案最先到达。