Amit Desale
Amit Desale

Reputation: 1291

How to receive html response through volley

I am calling web service through volley. In that web service i am sending three input parameters using json object. but in response i am receiving html response. and it gives me error. how to get html response in onResponse method? is there any solution to solve this problem?

  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);

    }

i am getting this error

Log cat error

this is response i am getting in this webservice:

<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%;">
                        ***[email protected]
                    </td>
                    <td style="background-color:F7F7FF; width:20%; font-weight:bold;">
                        Cook Email
                    </td>
                    <td style="background-color:F7F7FF; width:30%;">
                        ***[email protected]
                    </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>

Upvotes: 3

Views: 4351

Answers (3)

Amit Desale
Amit Desale

Reputation: 1291

I solve this issue by adding html response in json object in key value pair. now i fetch html response through json object.

Upvotes: 0

Sanoop Surendran
Sanoop Surendran

Reputation: 3486

I think your response from your server is in html format.. in order to parse the html response in java there are some ways, But i personally like JSOUP you can also refer links this and this

First in your gradle file add the dependency

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

Then parse the html attributes like for example.

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

Hope this helps..

Upvotes: 3

Sujewan
Sujewan

Reputation: 1023

This would be a code for Getting response using 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);

For more details: Go through this link

Upvotes: 1

Related Questions