Android - 在应用程序

时间:2015-07-26 12:12:04

标签: javascript android angularjs webview

我有一个基本上是webview应用程序的应用程序。该网站基于角度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文件都在assets文件夹中。我也想知道如何加载所有这些文件。

1 个答案:

答案 0 :(得分:0)

经过一些头脑风暴,答案是从assetManager.open("/" + assetPath);

中删除“/”

所以最后只需将assetManager.open(assetPath);放入代码中即可!

相关问题