C# 异步任务(C)中未执行OnPostExecute
我正在Xamarin Studio中制作一个Android应用程序,但是OnPostExecute没有执行 在DoInBackground方法中,我有:C# 异步任务(C)中未执行OnPostExecute,c#,android,android-asynctask,xamarin,C#,Android,Android Asynctask,Xamarin,我正在Xamarin Studio中制作一个Android应用程序,但是OnPostExecute没有执行 在DoInBackground方法中,我有: protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] native_parms) { System.IO.Stream ins = null; try { URL url = new URL(this.url);
protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] native_parms) {
System.IO.Stream ins = null;
try {
URL url = new URL(this.url);
HttpURLConnection conn = (HttpURLConnection) url.OpenConnection();
conn.ReadTimeout = 10000;
conn.ConnectTimeout = 15000;
conn.RequestMethod = "GET";
conn.DoInput = true;
conn.DoOutput = true;
Dictionary<string, string> queryParams = new Dictionary<string, string>();
queryParams.Add("username", this.username);
queryParams.Add("password", this.password);
System.IO.Stream os = conn.OutputStream;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
// getQueryString() just builds a query string
writer.Write(getQueryString(queryParams));
writer.Flush();
writer.Close();
os.Close();
// Starts the query
conn.Connect();
int response = (int) conn.ResponseCode;
System.Console.WriteLine(response);
ins = conn.InputStream;
// Convert the InputStream into a string
String contentAsString = read(ins, conn.ContentLength);
System.Console.WriteLine("Done the task.");
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
}
finally {
if (ins != null) {
ins.Close();
}
}
}
我只是调用AsyncTask.execute方法
猜猜看,这是输出:
完成了任务。
为什么?而且,更重要的是,我如何修复它?我仍然不知道为什么它不能与类型参数一起工作。但是,为了让事情顺利进行,您只需要删除泛型部分:
public class YourTask : AsyncTask { ... }
然后用Java.Lang.Object替换所有出现的发布、进度或结果参数:
下面是一个使用通用异步任务的示例。我不知道你到底有什么问题,因为你仍然没有显示所有相关的代码。也就是说,对PostExecuteAsyncTaskResult的重写乍一看似乎是错误的——请注意,在我的例子中,我的版本使用TResult作为parmater类型int
public class MyTask: AsyncTask<string, int, int>
{
protected MyTask(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
public MyTask()
{
}
protected override int RunInBackground(params string[] @params)
{
return 4;
}
protected override void OnPostExecute(int result)
{
System.Console.WriteLine("On post execute");
base.OnPostExecute(result);
}
}
很多人都非常喜欢Xamarin Android的开发。请不要发表这样的意见。这就是-1的来源吗?你能给我们展示更多的代码吗?考虑到这几行代码,很难说。不是我,但我同意@MihaMarkic的观点,需要更多的代码才能提供答案。
protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] parms) { ... }
protected override void OnPostExecute(Java.Lang.Object result) { ... }
public class MyTask: AsyncTask<string, int, int>
{
protected MyTask(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
public MyTask()
{
}
protected override int RunInBackground(params string[] @params)
{
return 4;
}
protected override void OnPostExecute(int result)
{
System.Console.WriteLine("On post execute");
base.OnPostExecute(result);
}
}