如何将doInBackground()方法实现为抽象方法? IDE还说,对于AsyncTask <...>
,我需要3个参数,而不是1个package com.example.a_phi.nowswap;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class EstablishConnection extends AsyncTask<String>{
StringBuilder sb = new StringBuilder();
public String doInBackground(String id) {
String link = "http://213.251.43.215/addContact.php";
try {
URL url = new URL(link);
String data = URLEncoder.encode("id", "UTF-8")
+ "=" + URLEncoder.encode(id, "UTF-8");
URLConnection conn = url.openConnection();
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader reader = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String line;
// Read Server Response
while((line = reader.readLine()) != null) {
sb.append(line);
break;
}
}catch(MalformedURLException e) {
System.out.print("MalformedURLException" + e.getMessage());
e.printStackTrace();
}
catch(IOException e){
System.out.print("IOException"+e.getMessage());
e.printStackTrace();
}
return sb.toString();
}
}
如何将doInBackground()方法实现为抽象方法? IDE还说,对于AsyncTask <...>
,我需要3个参数,而不是1个答案 0 :(得分:2)
The documentation表示AsyncTask
具有3个通用参数:<Params, Progress, Result>
。
AsyncTask的通用类型
异步任务使用的三种类型如下:
- 参数,执行时发送给任务的参数类型。
- 进度,是后台计算过程中发布的进度单位的类型。
- 结果,背景计算结果的类型。并非所有类型都总是由异步任务使用。要将类型标记为未使用,只需使用类型
Void
:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
您似乎希望Params
和Result
的类型为String
(根据您对doInBackground
方法的签名),因此您的类应该{{1 }},并实施extends AsyncTask<String,Void,String>
。
答案 1 :(得分:1)
我将doInBackground(String id)
更改为doInBackground(String... id)
。
我也将AsyncTask<String>
更改为AsyncTask<String, String, String>
,然后它起作用了。
答案 2 :(得分:0)
doInBackground()
方法的签名与您尝试实现的签名不同,为shown in the documentation。
请注意,AsyncTask
抽象类要求您的方法实现具有以下签名:
doInBackground(Params...) // the "..." is to say, an arbitrary number of arguments
等效于此,而不是您当前正在做什么:
doInBackground(Param) // a method with a single argument only
如果您按照以下方式更新实现,它将解决您的编译问题:
// Update the method signature of doInBackground as follows:
public String doInBackground(String... ids) {
String id = ids[0];
/* Beyond this point, you can leave your current implementation as it is*/
}