2012-10-30 10 views
5

Desteklenmeyen bir URL protokolüne (şema) sahip bir dizeyi URL olarak kodlamak istiyorum. Yani, üçüncü satırda, bir istisna atılacaktır. URL sınıfı desteği "mmsh" veya başka bir "custom_name" şeması yapmak için zaten var mı?Java sınıfındaki diğer protokolleri desteklemek için URL sınıfını nasıl genişletirim (android)?

DÜZENLEME: Uygulamam için bazı protokolleri kaydetmek istemiyorum. Sadece "desteklenmeyen protokol" istisnası olmadan URL sınıfını kullanabilmek istiyorum. URL dizisini, URL dizesini ayrıştırmak ve düzenlemek için kullanıyorum.

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

genişletmek için gereken (http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java) –

+1

Bu biraz yardımcı olabilir: http://stackoverflow.com/questions/ 11421048/android-ios-custom-uri-protokol-işleme –

+0

Teşekkür ederim, ama benim uygulama için bazı protokolleri kaydetmek istemiyorum. Sadece "desteklenmeyen protokol" istisnası olmadan URL sınıfını kullanabilmek istiyorum. URL dizisini, URL dizesini ayrıştırmak ve düzenlemek için kullanıyorum. – frankish

cevap

3

Ben URL to load resources from the classpath in Java ve Custom URL protocols and multiple classloaders sağlanan koduna göre numune programını oluşturdu ve iyi çalışıyor gibi görünüyor. [URLStreamHandler] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLStreamHandler.html) [buradan] örnek kontrol java olarak

@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); 
     } 
    } 
} 
İlgili konular