Исключение при выполнении httpclient с запросом PUT - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно загрузить (PUT) многокомпонентные данные, которые включают файл PDF / JSON, некоторые метаданные и заголовок с авторизацией, но возникает исключение.Я новичок с составными данными и Android, поэтому, если кто-то может указать, где я иду не так.

private void documentUpload(String filePath, String docType, String consID, String documentRef, String docTypeNamespace, String fileType) {

    HttpClient httpclient = new DefaultHttpClient();
    HttpPut httpPut = new HttpPut(uploadURL);


    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    try{
        multipartEntity.addPart("consignmentId", new StringBody(consID));
        multipartEntity.addPart("docType", new StringBody(docType));
        multipartEntity.addPart("documentReference", new StringBody(documentRef));
        multipartEntity.addPart("docTypeNamespace", new StringBody(docTypeNamespace));
        multipartEntity.addPart("fileType", new StringBody(docType));
        multipartEntity.addPart("file", new FileBody(new File(filePath)));
    }
    catch (Exception e){
        System.out.println("Exception Here");
    }


    httpPut.setEntity(multipartEntity);
    httpPut.addHeader("authorization","bearer "+token);

    try {
        // Exception in this line
        HttpResponse response = httpclient.execute(httpPut);
        HttpEntity entity = response.getEntity();
        String s = entity.toString();
        System.out.println( s ) ;

        HttpEntity resEntity = response.getEntity();
        System.out.println( resEntity ) ;
    }
    catch (Exception e){
        System.out.println("Exception Here2");
        e.printStackTrace();

    }
}

Это моя трассировка стека, которая появляется, когда я пытаюсь выполнить запрос PUT

2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err: android.os.NetworkOnMainThreadException
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at java.net.InetAddress.getAllByName(InetAddress.java:1154)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:44)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:260)
2019-03-01 11:49:28.483 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:160)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at com.example.blockchain.uploadDocument.documentUpload(uploadDocument.java:199)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at com.example.blockchain.uploadDocument.onActivityResult(uploadDocument.java:133)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at android.app.Activity.dispatchActivityResult(Activity.java:7454)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
2019-03-01 11:49:28.484 9526-9526/com.example.blockchain W/System.err:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.os.Looper.loop(Looper.java:193)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6669)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
2019-03-01 11:49:28.485 9526-9526/com.example.blockchain W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

NetworkOnMainThreadException

это произойдет, когда вы вызываете операцию по сети в потоке Main / UI. Ссылочная ссылка

Чтобы устранить это исключение, вам нужно вызвать операцию Network в фоновом потоке

1)

Thread thread = new Thread() {
    public void run() {
        //your network opetaion
    }
};
thread.start();

или

2) создайте асинхронную задачу и выполните сетевую операцию в doInBackground () метод

0 голосов
/ 01 марта 2019

Ваш httpclient.execute() включен в UIThread, это вызовет исключение NetworkOnMainThreadException, и пользовательский интерфейс будет заблокирован до завершения выполнения.Вам нужен новый другой поток до httpclient.execute() Пример из вашего кода:

Thread thread = new Thread() {
    public void run() {
        //your try catch code
    }
};
thread.start();

Если вам нужно что-то изменить в пользовательском интерфейсе, вы включаете:

runOnUiThread(() -> {
   // Your UI code ex: textView.setText("");
});
...