我在stackoverflow上得到了这个代码elswhere。它从一开始就不适合我。
要停止初始错误,我必须更改
protected void doInBackground(String... params) {
到
protected String doInBackground(String... params) {
我一直返回错误,但e.getmessage返回一个空值。
public class CallAPI extends AsyncTask<String, String, String> {
public CallAPI(){
//set context variables if required
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String urlString = params[0]; // URL to call
String data = params[1]; //data to post
OutputStream out = null;
Log.i("doinbackground url=", urlString + data);
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
out = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
out.close();
urlConnection.connect();
} catch (Exception e) {
String ErrorMessageJ = "Error message is NULL";
if (e.getMessage() != null ){ErrorMessageJ = e.getMessage();}
Log.i("doinbackground e", ErrorMessageJ);
}
return null;
}
}
答案 0 :(得分:2)
您将在null
检查
doInBackground
根据{{1}} 的参数,可能需要Return
String
doInBackground
AsyncTask
答案 1 :(得分:1)
异步任务由3种泛型类型定义,称为Params,Progress和Result。
如果在doInBackground()
接受字符串中,则必须返回字符串值。
@Override
protected String doInBackground(String... params) {
String urlString = params[0]; // URL to call
private String response;;
String data = params[1]; //data to post
OutputStream out = null;
Log.i("doinbackground url=", urlString + data);
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
out = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
out.close();
urlConnection.connect();
response= data[0];
} catch (Exception e) {
response=e.getMessage();
String ErrorMessageJ = "Error message is NULL";
if (e.getMessage() != null ){ErrorMessageJ = e.getMessage();}
Log.i("doinbackground e", ErrorMessageJ);
}
return response;
}
快乐的编码!!
答案 2 :(得分:-1)
请使用Retrofit而不是通过AsyncTask进行调用。 AsyncTask是旧的,性能也很慢,并且存在内存泄漏等问题。
所以我更喜欢你使用改造。
请查看以下链接,它对您非常有用,并清除了许多关于接口的核心java的新概念。
https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/
希望这会有所帮助。