2017-07-29 3 views
0

Hier habe ich Code geschrieben, um HttpPost Anfrage in Android zu implementieren, die nach der onClick Methode laufen sollte.javax.net.ssl.SSLException mit HttpPost Anfrage in Android

Nun, ich habe die Lösung nicht bekommen, das ist das 3. Programm, das ich ausprobiert habe und nun die Frage aktualisiere.

Aber ich weiß nicht jedes Mal, dass ich das gleiche error bekomme. Bitte sehen Sie sich diese Situation an.

Ich glaube, die Codes sind fast korrekt mit jeder kleinen erforderlichen Korrektur, müssen anders denken, was ich hier tue.

Da es funktioniert als einfaches Java-Programm in eclipse aber android studio löst exception. Diese

ist onClick Methode:

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

Dies ist 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(); 

    } 
} 

Hier in stackTrace von Android Monitor zeigt Ich bin keine Ausnahme bekommen, aber nach dem Debuggen ich es wirft die Ausnahme gefunden

javax.net.ssl.SSLException: Read error: ssl=0xd6483780: I/O error during system call, Connection reset by peer

Und der Fehlercode unterscheidet sich manchmal für das gleiche Programm.

Ich bin nicht in der Lage zu finden, welchen Fehler ich hier mache.

Bitte jemand mir helfen.

Antwort

0

Versuchen Sie, Ihre App-Ebene build.gradle zu aktualisieren, durch diese Zeile hinzufügen

useLibrary 'org.apache.http.legacy' 

in den ersten Block/Teil namens als android Beispiel:

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" 
     } 

und führen Sie Ihre Programm

+0

Thaks viel. Durch Hinzufügen dieser Zeile wird das Programm ausgeführt. aber jetzt in dieser Zeile 'HttpResponse response = (HttpResponse) httpclient.execute (httpPostRequest);' Die 'Antwort' ist _null_. und der _error_ ist 'javax.net.ssl.sslexception connection reset by peer android' – Shambhu

Verwandte Themen