0

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

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

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

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

因为它可以作为简单的 java 程序正常工作,eclipseandroid 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();

    }
}

在这里我没有得到任何异常显示stackTraceAndroid Monitor但调试后我发现它抛出异常

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

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

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

请有人帮助我。

4

1 回答 1

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

然后运行你的程序

于 2017-07-29T06:22:54.860 回答