[英]AsyncTask not working with okhttp post request
当我尝试运行应用程序时,应用程序的行为方式是黑屏 -> 返回主活动。
这是我的代码:
public class ResultsActivity extends AppCompatActivity {
final TextView textView = findViewById(R.id.textView);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
new NetworkTask().execute();
}
public void backToMain(View v) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
private class NetworkTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
final String image = getExternalCacheDir() + "/image.jpeg";
File file = new File(image);
try {
final MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("images", "image.jpeg",
RequestBody.create(file, MEDIA_TYPE_JPEG))
.addFormDataPart("organs", "leaf")
.build();
Request request = new Request.Builder()
.url("insert url here")
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
String result = response.body().string();
return result;
} catch(IOException e) {
e.printStackTrace();
return "error";
}
}
@Override
protected void onPostExecute(String result) {
if(result.equals("error")) {
textView.setText("error");
} else {
textView.setText(result);
}
}
}
我相当确定发布请求可以正常工作,因为我已经使用以下方法对其进行了测试:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
所以,也许问题在于我把它放在 AsyncTask 中的方式。
正如卡尔所说,我将这行代码放在 doInBackground 方法上。 我的问题已经解决了。
@Override
protected String doInBackground(String... params) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//...
}
在某些情况下使用 AsyncTask 是必要的,例如发送图像队列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.