android-如何通过截击接收html响应
作者:互联网
我通过排球打电话给网络服务.在该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 one rrorResponse(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);
}
我收到此错误
这是我在此网络服务中得到的响应:
<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>
解决方法:
我认为您来自服务器的响应是html格式的.为了解析Java中的html响应,有一些方法,但是我个人喜欢JSOUP,您也可以引用链接this和this
首先在您的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");
希望这可以帮助..
标签:android-volley,httpresponse,web-services,android 来源: https://codeday.me/bug/20191026/1939745.html