在这里,我编写了代码来HttpPost
在 android 中实现请求,它应该在onClick
方法之后运行。
好吧,我没有得到解决方案,这是我尝试过的第三个程序,现在正在更新问题。
但我不知道每次我得到相同的error
。请看一下这种情况。
我相信,代码几乎是正确的,需要任何小的修正,需要与我在这里做的不同的思考。
因为它可以作为简单的 java 程序正常工作,eclipse
但android studio
会抛出exception
.
这是onClick
方法:
public void onClick(View v) {
inputSub = subIn.getText().toString();
String url = "https://some_url";
String inputJson = null;
try {
inputJson = "{ \"asset\": {\"id\": ..........}";
}catch (JSONException e){
e.printStackTrace();
}
new CreateIncident(url, inputJson).execute();
}
这是AsyncTask class
:
private class CreateIncident extends AsyncTask<Void, Void, Void> {
private final String TAG = "HttpClient";
final String user ="some_user";
final String password ="some_pwd";
String serUrl;
String inputJson ="";
public CreateIncident(String serUrl, String inputJson) {
this.serUrl = serUrl;
this.inputJson = inputJson;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(CreateIncidentActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
String authString = user + ":" + password;
byte[] authBytes = authString.getBytes();
String authStringEnc = Base64.encodeToString(authBytes, Base64.DEFAULT);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(serUrl);
postRequest.setHeader("Authorization", "Basic " + authStringEnc);
postRequest.setHeader("Accept", "application/json");
postRequest.setHeader("Content-type", "application/json");
StringEntity input = new StringEntity(inputJson);
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
StringBuilder sb = new StringBuilder();
try {
BufferedReader reader =
new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 65728);
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
}
catch (IOException e) { e.printStackTrace(); }
catch (Exception e) { e.printStackTrace(); }
System.out.println("finalResult " + sb.toString());
System.out.println(response.getStatusLine().getReasonPhrase());
if (response.getStatusLine().getStatusCode() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
httpClient.getConnectionManager().shutdown();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
}
}
在这里我没有得到任何异常显示stackTrace
,Android Monitor
但调试后我发现它抛出异常
javax.net.ssl.SSLException: Read error: ssl=0xd6483780: I/O error during system call, Connection reset by peer
对于同一程序,错误代码有时会有所不同。
我无法找到我在这里做的错误。
请有人帮助我。