MalformedURLException: неизвестный протокол: Android - PullRequest
0 голосов
/ 27 июня 2018

Я пытался адаптировать код из этого: Средство просмотра 3D-моделей для моего приложения, потому что я хочу вставить некоторые модели из этого вида, чтобы показать анатомию человека.

Все выглядит хорошо, я сначала клонировал и попробовал оригинальный репозиторий, он работал, поэтому я начал использовать этот код.

После адаптации и проверки все в порядке, и никаких ошибок не отмечено, я запустил приложение, но, похоже, возникла проблема. В исходном коде человек сохраняет URL-адрес следующим образом:

url = new URL("android://org.andresoviedo.dddmodel2/assets/" + parent.getParamAssetDir() + File.separator + parent.getParamAssetFilename());

Я уже изменил первую часть моего проекта:

url = new URL("android://com.example.ovman.appbotox/assets/" + parent.getParamAssetDir() + File.separator + parent.getParamAssetFilename());

так что я не думаю, что, я вставил несколько журналов, чтобы убедиться, что параметры не равны нулю.

Класс в github находится здесь: SceneLoader.java

Итак, когда я дохожу до этого момента, Logcat говорит "неизвестный протокол: andorid". Вот полный logcat:

06-26 17:34:26.304 26616-26616/com.example.ovman.appbotox E/SceneLoader: unknown protocol: android
java.net.MalformedURLException: unknown protocol: android
    at java.net.URL.<init>(URL.java:608)
    at java.net.URL.<init>(URL.java:498)
    at java.net.URL.<init>(URL.java:447)
    at com.example.ovman.appbotox.model3D.services.SceneLoader.init(SceneLoader.java:118)
    at com.example.ovman.appbotox.ZonesActivity.onCreate(ZonesActivity.java:108)
    at android.app.Activity.performCreate(Activity.java:7131)
    at android.app.Activity.performCreate(Activity.java:7122)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6642)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
06-26 17:34:26.533 26616-26616/com.example.ovman.appbotox E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ovman.appbotox, PID: 26616
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ovman.appbotox/com.example.ovman.appbotox.ZonesActivity}: java.lang.RuntimeException: java.net.MalformedURLException: unknown protocol: android
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2902)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6642)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.RuntimeException: java.net.MalformedURLException: unknown protocol: android
        at com.example.ovman.appbotox.model3D.services.SceneLoader.init(SceneLoader.java:124)
        at com.example.ovman.appbotox.ZonesActivity.onCreate(ZonesActivity.java:108)
        at android.app.Activity.performCreate(Activity.java:7131)
        at android.app.Activity.performCreate(Activity.java:7122)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6642) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: java.net.MalformedURLException: unknown protocol: android
        at java.net.URL.<init>(URL.java:608)
        at java.net.URL.<init>(URL.java:498)
        at java.net.URL.<init>(URL.java:447)
        at com.example.ovman.appbotox.model3D.services.SceneLoader.init(SceneLoader.java:118)
        at com.example.ovman.appbotox.ZonesActivity.onCreate(ZonesActivity.java:108) 
        at android.app.Activity.performCreate(Activity.java:7131) 
        at android.app.Activity.performCreate(Activity.java:7122) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6642) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

1022 *

Мой репозиторий это , приложение работает, ошибки не отмечены, просто при выборе третьей опции в моем меню (это первый экран) происходит сбой.

Я сохранил строку url так, потому что я не знал, действительно ли важна часть "android: //".

Как вы думаете, что я должен изменить, или вы знаете, что означает эта ошибка? Нужно ли что-нибудь импортировать? Я проверил исходный проект (манифест, структура папок, gradle) и все похоже, поэтому я не знаю, в чем заключается ошибка.

В конце я хочу получить доступ к папке с активами, чтобы показать некоторые файлы .obj. Что касается URL, я знаю, что для ссылок вы должны поставить протокол, но я не понимаю, почему протокол Android не работает для получения чего-либо в одном из путей моего проекта.

EDIT: В моем репозитории я внес некоторые изменения, чтобы получить файл obj, однако, если кто-то может сказать мне (так как модификация не имеет никакого отношения к URL), как управлять этим в протоколе Android. Я проверил эту ссылку: URL , но я не смог найти много.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Просто используйте java.net.URI вместо java.net.URL

UPDATE

Рассмотрим это

0 голосов
/ 20 августа 2018

Протокол "android" обрабатывается пользовательским обработчиком.

// Custom handler: org/andresoviedo/app/util/url/android/Handler.class
System.setProperty("java.protocol.handler.pkgs", "org.andresoviedo.app.util.url");

Возможно, по какой-то причине свойство System, которое регистрирует пользовательский обработчик, не работает. Таким образом, чтобы заставить Java обрабатывать пользовательский протокол, вы можете сделать это так:

URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() {
    @Override
    public URLStreamHandler createURLStreamHandler(String protocol) {
       if ("android".equals(protocol)){
           return new Handler();
       }
       return null;
    }
});
...