java - 如何使用带有插入返回所需的 urlconnection 的 AsyncTask?
问题描述
我想用来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 与需要插入返回的 urlconnection 一起使用
您需要在Update()
方法中返回一个字符串
也无需Thread
在您的Update()
方法中使用另一个,因为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);
}
}
推荐阅读
- swift - 如何在 Swift 中将图像发布到 Instagram 故事?
- c# - 在 ValidationContext 的 ctor 中使用 Filter 和 ValidatorAttribute 会导致 System.ArgumentNullException
- php - 将mysql数据添加到HTML表中
- c# - Get inner JSON content as string without deserializing
- google-cloud-platform - 无法将 350 GB 数据从一个存储桶复制到谷歌云中的另一个存储桶
- unity3d - 建造一堵提高速度统一的墙
- python - 如何避免在 Django 中使用 context_processors.py 时在登录页面上请求用户?
- wordpress - 来自 WP REST API 的类别的 Vuejs vfor 循环中的 SVG
- oracle - 一个多小时前在 Apex Oracle 中创建的不同颜色记录
- json - 按值排序json数组jq bash