我有一个upload(String base_code)
方法,该方法采用base64编码的字符串形式的文件,
此方法向api端点发出带有base64字符串的发布请求,以将文件上传到服务器中,
如果上传成功,则api端点将返回200状态代码。
public static void upload(final String base_code) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Request request;
RequestBody request_body;
Response response;
MultipartBody.Builder body = new MultipartBody.Builder();
body.setType(MultipartBody.FORM);
body.addFormDataPart("img", base_code);
request_body = body.build();
request = new Request.Builder().url("https://api/endpoint/upload").post(request_body).build();
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
我希望方法upload()
返回true或false,表示上传是否成功,
但是我不能这样做,因为代码在自己的线程中执行。我该怎么做?
发布请求是通过okhttp3
库完成的,我可以通过检查response.code()
来确定上传是否成功。
谢谢
答案 0 :(得分:0)
使用AsyncTask
。您可以在thread
方法中执行doInBackground
,然后通过uiThread
方法将数据传递回onPostExecute
。
检出this。
答案 1 :(得分:0)
我更喜欢使用ExecutorService
或AsyncTask
。立即使用线程很难管理。
使用ExecutorService监视任务状态:
ExecutorService es = Executors.newCachedThreadPool();
Future future = es.submit(new Runnable() {
@Override
public void run() {
// Http post here
}
});
然后您可以调用Future
的方法来检查执行状态。
使用AsyncTask:
private class postTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected Boolean doInBackground(String... strings) {
// Http post here
return result == 200;
}
@Override
protected void onPostExecute(Boolean success) {
super.onPostExecute(success);
// Do something according to `success`
}
}
然后调用execute(url)
或executeOnExecutor(es, url)
开始;