2012-10-30 24 views
5

Tôi muốn url mã hóa chuỗi có giao thức url không được hỗ trợ (lược đồ). Vì vậy, trên dòng thứ ba, một ngoại lệ sẽ được ném. Có cách nào để hỗ trợ lớp URL "mmsh" hoặc bất kỳ chương trình "custom_name" nào khác không?Làm cách nào để mở rộng lớp URL để hỗ trợ các giao thức khác trong java (android)?

EDIT: Tôi không muốn đăng ký một số giao thức cho đơn đăng ký của mình. Tôi chỉ muốn có thể sử dụng lớp URL mà không có ngoại lệ "giao thức không được hỗ trợ". Tôi đang sử dụng lớp URL chỉ để phân tích và dọn dẹp chuỗi 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()); 
+1

Trong java bạn cần mở rộng từ [URLStreamHandler] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLStreamHandler.html) ví dụ kiểm tra [tại đây] (http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java) –

+1

Đây có thể là một số trợ giúp thử: http://stackoverflow.com/questions/ 11421048/android-ios-custom-uri-protocol-handling –

+0

Cảm ơn tất cả, nhưng tôi không muốn đăng ký một số giao thức cho ứng dụng của mình. Tôi chỉ muốn có thể sử dụng lớp URL mà không có ngoại lệ "giao thức không được hỗ trợ". Tôi đang sử dụng lớp URL chỉ để phân tích và dọn dẹp chuỗi url. – frankish

Trả lời

3

Tôi tạo ra chương trình mẫu dựa trên mã được cung cấp trên URL to load resources from the classpath in JavaCustom URL protocols and multiple classloaders và có vẻ như để làm việc tốt.

@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); 
     } 
    } 
} 
Các vấn đề liên quan