4

サポートされていないURLプロトコル(スキーム)を持つ文字列をURLエンコードしたい。したがって、3行目では、例外がスローされます。URLクラスが「mmsh」または他の「custom_name」スキームをサポートするようにする方法はありますか?

編集:アプリケーションにいくつかのプロトコルを登録したくありません。「サポートされていないプロトコル」の例外なしでURLクラスを使用できるようにしたいだけです。私はURL文字列を解析して整理するためだけにURLクラスを使用しています。

String string="mmsh://myserver.com/abc";

String decodedURL = URLDecoder.decode(string, "UTF-8");
URL url = new URL(decodedURL);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); 
4

1 に答える 1

2

URL to load resources from the classpath in Java と で提供されているコードに基づいてサンプル プログラムを作成しましたが、 Custom URL protocols and multiple classloaders問題なく動作するようです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    URL url;
    try {

        url = new URL(null, "user:text.xml", new Handler());
        InputStream ins = url.openStream();
        ins.read();
        Log.d("CustomURL", "Created and accessed it using custom handler ");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
public static class Handler extends URLStreamHandler {
    @Override
    protected URLConnection openConnection(URL url) throws IOException {
        return new UserURLConnection(url);
    }

    public Handler() {
    }

    private static class UserURLConnection extends URLConnection {
        private String fileName;
        public UserURLConnection(URL url) {
            super(url);
            fileName = url.getPath();
        }
        @Override
        public void connect() throws IOException {
        }
        @Override
        public InputStream getInputStream() throws IOException {

            File absolutePath = new File("/data/local/", fileName);
            return new FileInputStream(absolutePath);
        }
    }
}
于 2012-10-30T08:12:17.810 に答える