android - 我为我的 json 帖子和响应设置了进度条。但它没有显示
问题描述
我正在使用 json 将数据发布到服务器。它工作正常。但是当我使用进度条来显示进度时。它不工作。我的进度条根本没有显示,但仍然有数据发布并得到响应
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leave);
progressBar = findViewById(R.id.progressBarLeave);
submit_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar.setVisibility(View.VISIBLE);
sendData()
}
}
}
public void sendData(){
try {
String api_url = "https://url/";
String json_request = "{\"test\":\""+1+"\"}";
Log.e("driver_loc", location_request);
JSONObject response_data = call_api(api_url, json_request);
Log.e("response", String.valueOf(response_data));
if(response_data.getString("status").equals("1")) {
Toast.makeText(Leave.this, "Success", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
public JSONObject call_api(String api_url, String request_data) {
try {
URL url = new URL(api_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(request_data);
writer.flush();
writer.close();
os.close();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String response = "";
while ((line = bufferedReader.readLine()) != null) {
response += line;
}
Log.d("API response", response);
JSONObject response_data = new JSONObject(response);
return response_data;
} catch (Exception e) {
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
}
return null;
}
发布和获得响应工作正常,但进度条未显示。我想显示进度条,直到我得到服务器的响应。
解决方案
尝试将 sendData 包装在一个可运行的任务中。可能只是没有显示,因为您正在冻结 UI
new Handler().post(new Runnable() {
@Override
public void run() {
sendData();
}
});
推荐阅读
- javascript - 搜索表单:每次按键后仅提交部分刷新
- javascript - 根据某些条件修改 JS Array
- angular - 同一个 Angular 6 组件的多个实例
- codefluent - 我们可以选择不按实体生成视图吗?
- c++ - c++ 当在一个线程中写入并在第二个线程中读取同一个对象时会发生什么?(安全吗?)
- android - FirebaseMLException 在 Android 上使用 ML Kit 识别图像中的文本
- c++ - std::string(empty char*) 错误:basic_string::_S_construct null 无效错误
- c# - C# MVC 使用 NReco.PdfGenerator 从 View 生成 PDF
- jenkins - Jenkins Wildfly 部署
- java - 如何创建 JSp 模板并将其显示为 PDF