当前位置: 代码迷 >> JavaScript >> Android-在应用程序中加载本地js时出错
  详细解决方案

Android-在应用程序中加载本地js时出错

热度:24   发布时间:2023-06-03 18:07:34.0

我有一个基本上是webview应用程序的应用程序。 该网站基于angular js。 问题在于网站需要大量时间才能开始渲染。 所以我尝试从资产文件夹加载js。 我在webviewclient中使用了WebResourceResponse

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

        if(url.startsWith("https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.min.js")){
            return loadFromAssets(url, "angular.min.js", "application/javascript", "");
                               }
    return null;
    }

private WebResourceResponse loadFromAssets( String url,
                                            String assetPath, String mimeType, String encoding){

    AssetManager assetManager = this.activity.getAssets();
    InputStream input = null;
    try {
        Log.d(LOG_TAG, "Loading from assets: " + assetPath);

        input = assetManager.open("/" + assetPath);
        WebResourceResponse response =
                new WebResourceResponse(mimeType, encoding, input);

        return response;
    } catch (IOException e) {
        Log.e("WEB-APP", "Error loading " + assetPath + " from assets: " +
                e.getMessage(), e);
    }
    return null;
}

但是我不断收到filenotfound异常

    07-26 17:19:21.662  20883-21536/com.exun.brinjal D/﹕ Loading from assets: angular.min.js
07-26 17:19:21.663  20883-21536/com.exun.brinjal E/WEB-APP﹕ Error loading angular.min.js from assets: /angular.min.js
    java.io.FileNotFoundException: /angular.min.js
            at android.content.res.AssetManager.openAsset(Native Method)
            at android.content.res.AssetManager.open(AssetManager.java:335)
            at android.content.res.AssetManager.open(AssetManager.java:309)
            at com.exun.brinjal.HelloWebViewClient.loadFromAssets(HelloWebViewClient.java:85)
            at com.exun.brinjal.HelloWebViewClient.shouldInterceptRequest(HelloWebViewClient.java:37)
            at com.android.webview.chromium.WebViewContentsClientAdapter.shouldInterceptRequest(WebViewContentsClientAdapter.java:283)
            at com.android.org.chromium.android_webview.AwContents$IoThreadClientImpl.shouldInterceptRequest(AwContents.java:244)
            at dalvik.system.NativeStart.run(Native Method)
07-26 17:19:21.666  20883-21536/com.exun.brinjal D/﹕ Loading from assets: angular-route.min.js
07-26 17:19:21.669  20883-21536/com.exun.brinjal E/WEB-APP﹕ Error loading angular-route.min.js from assets: /angular-route.min.js
    java.io.FileNotFoundException: /angular-route.min.js
            at android.content.res.AssetManager.openAsset(Native Method)
            at android.content.res.AssetManager.open(AssetManager.java:335)
            at android.content.res.AssetManager.open(AssetManager.java:309)
            at com.exun.brinjal.HelloWebViewClient.loadFromAssets(HelloWebViewClient.java:85)
            at com.exun.brinjal.HelloWebViewClient.shouldInterceptRequest(HelloWebViewClient.java:40)
            at com.android.webview.chromium.WebViewContentsClientAdapter.shouldInterceptRequest(WebViewContentsClientAdapter.java:283)
            at com.android.org.chromium.android_webview.AwContents$IoThreadClientImpl.shouldInterceptRequest(AwContents.java:244)
            at dalvik.system.NativeStart.run(Native Method)

我试图更改assetManager.open("/" + assetPath); 到file:///和/ assets,但这没有帮助。 我需要的所有js和css文件都在资产文件夹中。 我也想知道我也将如何加载所有这些文件。

经过一番集思广益,答案是从assetManager.open("/" + assetPath);删除“ /” assetManager.open("/" + assetPath);

所以最后只需将assetManager.open(assetPath); 在代码中,瞧!

  相关解决方案