如何通过齐射接收html响应

时间:2016-07-18 05:24:17

标签: android web-services android-volley httpresponse

我通过排球呼叫网络服务。在该Web服务中,我使用json对象发送三个输入参数。但作为回应我收到了HTML回复。 它给了我错误。如何在onResponse方法中获取html响应?有什么解决方案可以解决这个问题吗?

  private void callWebServiceToGetDetails(final String uID, final String oID, final String sToken) {
        // initialize the progress dialog and show it
        // Showing progress dialog
        final ProgressDialog progressDialog = new ProgressDialog(HistoryScreenActivity.this, R.style.ProgressBarTansparent);
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.show();
        progressDialog.setContentView(R.layout.custom_progressbar_layout);

        String url = WebServices.GET_DETAILS_WEB_SERVICE;

        JSONObject jsonObjectChield = new JSONObject();
        try {
            jsonObjectChield.put("PUID", uID);
            jsonObjectChield.put("POID", oID);
            jsonObjectChield.put("POPF", "html");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        String jsonString = jsonObjectChield.toString();
        Log.d("Params","" + jsonString);

        final JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObjectChield, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                writeToFile(response.toString());

                webViewHistoryDetails.setVisibility(View.VISIBLE);

                File file = new File("" + path);
                webViewHistoryDetails.loadUrl("file:///" + file + "/report.html");
                progressDialog.dismiss();
            }
        }
        // Request a string response from the provided URL.
        , new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // Handle your error types accordingly.For Timeout & No connection error, you can show 'retry' button.
                // For AuthFailure, you can re login with user credentials.
                // In this case you can check how client is forming the api and debug accordingly.
                // For ServerError 5xx, you can do retry or handle accordingly.
                if (error instanceof NetworkError) {
                    Toast.makeText(HistoryScreenActivity.this, "No internet connection", Toast.LENGTH_SHORT).show();
                } else if (error instanceof ServerError) {
                    Toast.makeText(HistoryScreenActivity.this, "Our server is busy please try again later", Toast.LENGTH_SHORT).show();
                } else if (error instanceof AuthFailureError) {
                    Toast.makeText(HistoryScreenActivity.this, "AuthFailure Error please try again later", Toast.LENGTH_SHORT).show();
                } else if (error instanceof ParseError) {
                    Toast.makeText(HistoryScreenActivity.this, "Parse Error please try again later", Toast.LENGTH_SHORT).show();
                } else if (error instanceof NoConnectionError) {
                    Toast.makeText(HistoryScreenActivity.this, "No connection", Toast.LENGTH_SHORT).show();
                } else if (error instanceof TimeoutError) {
                    Toast.makeText(HistoryScreenActivity.this, "Server time out please try again later", Toast.LENGTH_SHORT).show();
                }
                error.printStackTrace();
                progressDialog.dismiss();
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json");
                // headers.put("Authorization", "Basic c2NvdHQ6dGlnZXI=");
                headers.put("token-id", sToken);
                String creds = String.format("%s:%s", "scott", "tiger");
                String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
                headers.put("Authorization", auth);
                Log.d("SToken",sToken);

                // String creds = String.format("%s:%s", "scott", "tiger");
                // String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
                // headers.put("Authorization", auth);
                return headers;
            }
        };

        Volley.newRequestQueue(HistoryScreenActivity.this).add(postRequest);

    }

我收到此错误

Log cat error

这是我在这个网络服务中得到的回应:

<html>
<head>
<title>Order Details</title>
<style>
body
table td{
    font-family: "Roboto Condensed", sans-serif;
    color: #656565;
    font-size: 14px;
}
</style>
</head>
<body>
<table style="width:100%; cellpadding:0; cellspacing:1;">
    <tr style="background:#CDDDF7;">
        <td style="text-align:center; padding:20px; font-weight:bold; font-size:22px;">Order</td>
    </tr>
    <tr>
        <td>
            <table cellpadding="6" style="width:100%; cellpadding:0; cellspacing:1; background:#F7F7FF; border:1px solid #BEC0CC; border-radius:3px 3px 0px 0px;  padding-bottom:15px;">
            <tbody>
                <tr style="padding-bottom:10px; background-color:#ccc;">
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Order Number 
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        67
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Order Date 
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        2016-07-14
                    </td>
                </tr>
                <tr>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Customer Name
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        Optim India
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Cook Name
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        Kuldeep Sonawane
                    </td>
                </tr>
                <tr>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Customer Email
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        ***id@gmail.com
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Cook Email
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        ***id@gmail.com
                    </td>
                </tr>
                <tr>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Customer Contact Number
                    </td>
                    <td style="background-color:F7F7FF; width:30%; vertical-align:top;">
                        9876******
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold; vertical-align:top;">
                        cook Contact Number
                    </td>
                    <td style="background-color:F7F7FF; width:30%; vertical-align:top;">
                        9658******
                    </td>
                </tr>
                <tr>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold; vertical-align:top;">
                        order status
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        Accepted
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold; vertical-align:top;">
                        Delivery Address
                    </td>
                    <td style="background-color:F7F7FF; width:30%; vertical-align:top;">
                        clg rd, city - Carlsbad, state - California, country - United States, zip code - 422008
                    </td>
                </tr>
            </tbody>
            </table>
        </td>
    </tr>
    <tr>
        <td>
        <table cellpadding="4" cellspacing="0" style="width:100%; background:#F7F7FF; border:1px solid #BEC0CC; border-top:0!important; border-radius:0 0 3px 3px;">
        <tbody>
            <tr style="font-weight:bold;background-color:#CDDDF7;">
                <td>
                    Sr.
                </td>
                <td >
                    Dish Name
                </td>
                <td style="text-align:right;">
                    Quantity
                </td>
                <td style="text-align:right;">
                    Rate
                </td>
                <td style="text-align:right;">
                    Discount
                </td>
                <td style="text-align:right;">
                    Amount
                </td>
            </tr><tr style="background-color:#fff;">
                    <td style="text-align:center;">
                        1
                    </td>
                    <td>
                        Chicken Tikka Masala
                    </td>
                    <td style="text-align:right;">
                        4
                    </td>
                    <td style="text-align:right;">
                        25000
                    </td>
                    <td style="text-align:right;">
                        0
                    </td>
                    <td style="text-align:right;">
                        100000
                    </td>
                </tr><tr style="background-color:#fff;">
                <td style="border-top:1px solid #ccc;" colspan="4"></td>
                <td style="border-top:1px solid #ccc;">
                    <b>Sub Total</b>
                </td>
                <td style="border-top:1px solid #ccc; text-align:right;">
                    100000
                </td>
            </tr>
            <tr>
                <td style="border-top:1px solid #ccc;" colspan="4"></td>
                <td style="background-color:F7F7FF; font-weight:bold;border-top:1px solid #ccc;">
                    <b>Total</b>
                </td>
                <td style="background-color:F7F7FF; font-weight:bold; border-top:1px solid #ccc; text-align:right;">
                    100000
                </td>
            </tr>
            <tr>
                <td style="border-top:1px solid #ccc;" colspan="4"></td>
                <td style="background-color:F7F7FF; font-weight:bold;border-top:1px solid #ccc;">
                    <b>Total Discount</b>
                </td>
                <td style="background-color:F7F7FF; font-weight:bold; border-top:1px solid #ccc; text-align:right;">
                    0
                </td>
            </tr>
        </tbody>
        </table>
        </td>
    </tr>
</table>
</body>
</html>

3 个答案:

答案 0 :(得分:3)

我认为您的服务器响应采用html格式..为了解析html中的java响应有一些方法,但我个人喜欢{{3}您还可以引用链接JSOUPthis

首先在gradle文件中添加依赖项

 compile 'org.jsoup:jsoup:1.8.3'  // new version is available i think.. 

然后解析html属性,例如。

 Document doc = JSoup.parse(response);
 String id = doc.select("input[name=id]").attr("value");

希望这会有所帮助..

答案 1 :(得分:1)

这是使用Volley

获取回复的代码
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                url, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, response.toString());
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                    }
                });

// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

有关详细信息:请完成此link

答案 2 :(得分:0)

我通过在键值对中的json对象中添加html响应来解决此问题。现在我通过json对象获取html响应。