在android中使用HttpPost请求的javax.net.ssl.SSLException

时间:2017-07-29 02:54:02

标签: java android android-asynctask http-post sslexception

这里我编写了在android中实现HttpPost请求的代码,该代码应该在onClick方法之后运行。

好吧,我没有得到解决方案,这是我尝试过的第三个程序,现在正在更新问题。

但我不知道每次我得到同样的error。请看看这种情况。

我相信,代码几乎是正确的,任何小的必要修正,需要与我在这里做的不同。

因为eclipse中的简单java程序可以正常工作,但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的{​​{1}}中显示任何异常,但在调试后我发现它正在抛出异常

Android Monitor

对于同一个程序,错误代码会有所不同。

我无法找到我在这里犯的错误。

请有人帮助我。

1 个答案:

答案 0 :(得分:0)

尝试更新您的应用级build.gradle, 通过添加此行

useLibrary 'org.apache.http.legacy'

进入名为android的第一个块/部分 例如:

apply plugin: 'com.android.application'

    android {
        useLibrary 'org.apache.http.legacy'
        compileSdkVersion 26
        buildToolsVersion "26.0.0"
        defaultConfig {
            applicationId "com.example.mnaum.getgpscoordinates"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }

然后运行您的程序