首页 > 解决方案 > 我为我的 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;
}

发布和获得响应工作正常,但进度条未显示。我想显示进度条,直到我得到服务器的响应。

标签: androidjsonprogress-bar

解决方案


尝试将 sendData 包装在一个可运行的任务中。可能只是没有显示,因为您正在冻结 UI

new Handler().post(new Runnable() {
            @Override
            public void run() {
                sendData();
            }
        });

推荐阅读