2012-10-30 11 views
5

Voglio url codificare una stringa che ha un protocollo url non supportato (schema). Quindi, sulla 3a riga, verrà lanciata un'eccezione. Esiste comunque il supporto della classe URL "mmsh" o qualsiasi altro schema "custom_name"?Come estendere la classe URL per supportare altri protocolli in java (android)?

MODIFICA: non desidero registrare alcuni protocolli per la mia applicazione. Voglio solo essere in grado di utilizzare la classe URL senza l'eccezione "protocollo non supportato". Sto usando la classe URL solo per analizzare e riordinare la stringa dell'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

in Java è necessario estendere da [URLStreamHandler] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLStreamHandler.html) controllare esempio [qui] (http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java) –

+1

Potrebbe essere utile provare: http://stackoverflow.com/questions/ 11421048/android-ios-custom-uri-protocollo-handling –

+0

Grazie a tutti, ma non voglio registrare alcuni protocolli per la mia applicazione. Voglio solo essere in grado di utilizzare la classe URL senza l'eccezione "protocollo non supportato". Sto usando la classe URL solo per analizzare e riordinare la stringa dell'URL. – frankish

risposta

3

ho creato esempio di programma in base al codice fornito sul URL to load resources from the classpath in Java e Custom URL protocols and multiple classloaders e sembra funzionare bene.

@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); 
     } 
    } 
} 
Problemi correlati