Java 如何使用urlconnection的AsyncTask来插入return?
我想使用Java 如何使用urlconnection的AsyncTask来插入return?,java,android,Java,Android,我想使用AsyncTask与服务器连接,但出现错误ondoInBackground。错误要求java.lang.string那么如何改进Update()中的代码?如何在Update()方法中插入“Return” public void Update(final String urlString){ new Thread(new Runnable() { public void run() { try { URL ur
AsyncTask
与服务器连接,但出现错误ondoInBackground
。错误要求java.lang.string
那么如何改进Update()
中的代码?如何在Update()
方法中插入“Return”
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);
}
}
public void更新(最终字符串urlString){
新线程(newrunnable()){
公开募捐{
试一试{
URL=新URL(URL字符串);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(connection.getOutputStream(),“UTF-8”);
writer.write(“name=abc”);
writer.close();
int responseCode=connection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
InputStream InputStream=connection.getInputStream();
StringBuilder StringBuilder=新的StringBuilder();
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(inputStream));
而((line=br.readLine())!=null){
stringBuilder.append(行);
}
字符串结果=stringBuilder.toString();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}).start();
}
公共类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…url){
返回更新(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(“标签”,结果);
}
}
使用以下代码启动异步任务:
MyAsyncTask task = new MyAsyncTask();
task.execute(URL);
注意:使用AsyncTask时,不应在Update(URL)方法中创建新线程
如何将AsyncTask与需要插入返回的urlconnection一起使用
您需要在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);
}
}
公共字符串更新(最终字符串urlString){
字符串结果=”;
试一试{
URL=新URL(URL字符串);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(connection.getOutputStream(),“UTF-8”);
writer.write(“name=abc”);
writer.close();
int responseCode=connection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
InputStream InputStream=connection.getInputStream();
StringBuilder StringBuilder=新的StringBuilder();
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(inputStream));
而((line=br.readLine())!=null){
stringBuilder.append(行);
}
结果=stringBuilder.toString();
}
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
公共类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…url){
返回更新(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(“标签”,结果);
}
}
已经在一个单独的线程中。只需从方法中删除它
注意:不要将AsynkTask用于与服务器的连接。(在活动生命周期中,这是一件不稳定的事情)@nameuser如果您觉得它对您有用,请随意使用。
extends AsyncTask<String,Void,String>
protected String doInBackground(String...url) {
return Update(url[0]);
}