(Android) Использование HttpUrlConnection для написания команды curl POST - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь реализовать код на основе curl, который взаимодействует с сервером на основе RQLite через приложение Android. В общем, команда разговаривает с сервером для запроса / выполнения SQL в ответ на JSON данные / ответ.

Команда Curl: curl -XPOST -k 'https://192.168.9.4:401/db/query?pretty' -H "Content-Type:application/json" -d '[" SELECT * FROM ABCTable "]'

URL в приведенной выше команде 'https://192.168.9.4:401/db/query?pretty'

данные: [" SELECT * FROM ABCTable "]

Java Код для Android:

 private void SendRequest() {
        HttpsURLConnection httpsURLConnection = null;
        try {
            URL url = new URL("192.168.9.4:401/db/query");
            httpsURLConnection = (HttpsURLConnection) (url.openConnection());

            String data1 = "[\n\"SELECT * FROM ABCTable\"\n]";
            httpsURLConnection.setDoOutput(true);
            httpsURLConnection.setRequestMethod("POST");
            httpsURLConnection.addRequestProperty("Content-Length", Integer.toString(data1.length()));
            httpsURLConnection.addRequestProperty("Content-Type", "application/json");
            httpsURLConnection.setUseCaches( false );

            int responseCode = httpsURLConnection.getResponseCode();

            if (responseCode == httpsURLConnection.HTTP_OK) {
                BufferedReader data = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
                StringBuffer sb = new StringBuffer("");
                String line = "";
                while ((line = data.readLine()) != null) {
                    sb.append(line);
                }

                Log.d("Result",sb.toString());
            }
        } catch (IOException e){
            e.printStackTrace();

        } finally {
            if (httpsURLConnection != null){
                httpsURLConnection.disconnect();
            }
        }

    }

Проблема в том, что я не получаю никакого ответа / ошибки от кода. Может ли кто-нибудь указать мне что-нибудь, что мне не хватает в документации или в общих ошибках?

Примечание: я видел много примеров на Inte rnet, но большинство из них основано на отправке JSON данные в запросах, но я должен отправить простую строку данных, которая дает ответ. Соединение основано на HTTPS, поэтому HttpsUrlConnection.

Logcat:

06-17 15:03:23.075 28254-28254/? I/art: Late-enabling -Xcheck:jni
06-17 15:03:23.147 28254-28254/com.base.httppost W/System: ClassLoader referenced unknown path: /data/app/com.base.httppost-2/lib/arm
06-17 15:03:23.188 28254-28254/com.base.httppost W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
06-17 15:03:23.229 28254-28254/com.base.httppost I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
06-17 15:03:23.229 28254-28254/com.base.httppost I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err: java.net.MalformedURLException: Unknown protocol: user
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at java.net.URL.<init>(URL.java:182)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at java.net.URL.<init>(URL.java:125)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at com.base.httppost.MainActivity.SendRequest(MainActivity.java:30)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at com.base.httppost.MainActivity.onCreate(MainActivity.java:24)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.Activity.performCreate(Activity.java:6259)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
06-17 15:03:23.320 28254-28254/com.base.httppost W/System.err:     at android.os.Looper.loop(Looper.java:148)
06-17 15:03:23.321 28254-28254/com.base.httppost W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5443)
06-17 15:03:23.321 28254-28254/com.base.httppost W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
06-17 15:03:23.321 28254-28254/com.base.httppost W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
06-17 15:03:23.321 28254-28254/com.base.httppost W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-17 15:03:23.376 28254-28288/com.base.httppost D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
06-17 15:03:23.437 28254-28288/com.base.httppost I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build:  (Ifd751822f5)

1 Ответ

0 голосов
/ 17 июня 2020

Сообщение об ошибке достаточно ясное: «неизвестный протокол». Протокол является ведущей частью URL-адреса. Попробуйте заменить строку создания объекта URL на:

URL url = new URL("https://192.168.9.4:401/db/query");
...