Как отправить запрос ajax с JavaScript из WebView в приложении Android - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь создать приложение с помощью Web View, и мне нужно отправить запрос ajax из JavaScript в файлах ресурсов. (Извините за мой английский)

Я написал код для загрузки файлов из ресурсов, но когда я делаю ajax-запрос, он всегда дает readyState: 0 status: 0

MainActivity.java

String TAG = "MainActivityTag";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final WebView webView = findViewById(R.id.webview);
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.i(TAG, url);
            if(url.contains("file:///")){
                view.loadUrl(url);
                return false;
            } else {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
        }
    });
    webView.getSettings().setJavaScriptEnabled(true);

    WebSettings webSettings = webView.getSettings();
    webSettings.setDomStorageEnabled(true);

    CookieManager.getInstance().setAcceptCookie(true);

    String url = "file:///android_asset/index.html";

    webView.loadUrl(url);
}

активы / index.html

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>Hello</h1>
    <span id="text"></span>
    </body>
</html>
<script src="jquery-3.3.1.js"></script>
<script>
    $.get("http://api.samosval/user/get", function(data) {
        $("#text").text(JSON.stringify(data));
    }).fail(function(data) {
        $("#text").text(JSON.stringify(data));
    });
</script>

При загрузке приложения выдает ошибку https://pp.userapi.com/c850528/v850528787/929d9/2GLghO0p1gI.jpg

Вот логи

1-15 02:00:54.068 13863-13863/com.arystankaliakparov.test15ver D/OpenGLRenderer: Skia GL Pipeline
01-15 02:00:54.120 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unsupported mime video/divx
01-15 02:00:54.121 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unsupported mime video/divx311
01-15 02:00:54.124 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unsupported mime video/divx4
01-15 02:00:54.134 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unrecognized profile 4 for video/hevc
01-15 02:00:54.136 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unrecognized profile/level 0/3 for video/mpeg2
01-15 02:00:54.138 13863-13922/com.arystankaliakparov.test15ver W/VideoCapabilities: Unrecognized profile/level 0/3 for video/mpeg2
01-15 02:00:54.141 13863-13924/com.arystankaliakparov.test15ver I/OpenGLRenderer: Initialized EGL, version 1.4
01-15 02:00:54.141 13863-13924/com.arystankaliakparov.test15ver D/OpenGLRenderer: Swap behavior 2
01-15 02:00:54.174 13863-13922/com.arystankaliakparov.test15ver I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
01-15 02:00:54.177 13863-13922/com.arystankaliakparov.test15ver W/Utils: could not parse long range '175-174'
01-15 02:00:54.192 13863-13931/com.arystankaliakparov.test15ver W/cr_CrashFileManager: /data/user/0/com.arystankaliakparov.test15ver/cache/WebView/Crash Reports does not exist or is not a directory
01-15 02:00:54.451 13863-13907/com.arystankaliakparov.test15ver D/NetworkSecurityConfig: No Network Security Config specified, using platform default

1 Ответ

0 голосов
/ 15 января 2019

Я нашел ответ для устройств более высокого уровня API 23. Вы должны включить использование CleartextTraffic в манифесте. Как это:

<manifest>

<uses-permission android:name="android.permission.INTERNET" />

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

</manifest>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...