我想使用AsyncTask
与服务器连接,但ondoInBackground
出现错误。该错误需要java.lang.string
那么我该如何改进Update()
中的代码?如何在Update()
方法中插入"返回"?
public void Update(final String urlString){
new Thread(new Runnable() {
public void run() {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
writer.write("name=abc");
writer.close();
int responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
InputStream inputStream = connection.getInputStream();
StringBuilder stringBuilder = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
stringBuilder .append(line);
}
String result = stringBuilder .toString();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public class MyAsyncTask extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute(){
super.onPreExecute();
}
@Override
protected String doInBackground(String...url) {
return Update(url[0]);
}
@Override
protected void onPostExecute(String result){
Log.d("TAG", result);
}
}
如何将AsyncTask与需要插入返回的url连接一起使用
您需要在 Update()
方法中返回一个字符串
也无需在Update()
方法中使用其他Thread
,因为AsyncTask
已经在后台运行
示例代码
public String Update(final String urlString){
String result="";
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
writer.write("name=abc");
writer.close();
int responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
InputStream inputStream = connection.getInputStream();
StringBuilder stringBuilder = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
stringBuilder .append(line);
}
result = stringBuilder .toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public class MyAsyncTask extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute(){
super.onPreExecute();
}
@Override
protected String doInBackground(String...url) {
return Update(url[0]);
}
@Override
protected void onPostExecute(String result){
Log.d("TAG", result);
}
}
使用以下代码启动 AsyncTask:
MyAsyncTask task = new MyAsyncTask();
task.execute(URL);
注意:使用 AsyncTask 时,您不应该在 Update(URL) 方法中创建新的线程
extends AsyncTask<String,Void,String>
这里的字符串意味着 AsynkTask 在返回中等待字符串类型。
protected String doInBackground(String...url) {
return Update(url[0]);
}
已经在单独的线程中。只需从方法中删除它即可。
不要使用 AsynkTask 与服务器连接。(这是活动生命周期不稳定的事情)