2012-10-30 14 views
5

मैं एक स्ट्रिंग एन्कोड करना चाहता हूं जिसमें एक असमर्थित यूआरएल प्रोटोकॉल (योजना) है। तो, तीसरी पंक्ति पर, एक अपवाद फेंक दिया जाएगा। क्या यूआरएल क्लास समर्थन "एमएमएसएच" या किसी अन्य "कस्टम_नाम" योजना बनाने के लिए वैसे भी है?जावा (एंड्रॉइड) में अन्य प्रोटोकॉल का समर्थन करने के लिए यूआरएल कक्षा का विस्तार कैसे करें?

संपादित करें: मैं अपने आवेदन के लिए कुछ प्रोटोकॉल पंजीकृत नहीं करना चाहता हूं। मैं सिर्फ "असमर्थित प्रोटोकॉल" अपवाद के बिना यूआरएल वर्ग का उपयोग करने में सक्षम होना चाहता हूं। मैं यूआरएल स्ट्रिंग को पार्स और साफ करने के लिए यूआरएल क्लास का उपयोग कर रहा हूं।

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

जावा में अपनी ओर से [URLStreamHandler] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLStreamHandler.html) उदाहरण जाँच [यहां] बढ़ाने की जरूरत (http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java) –

+1

यह कुछ मदद करने का प्रयास हो सकता है: http://stackoverflow.com/questions/ 11421048/एंड्रॉइड-आईओएस-कस्टम-यूरी-प्रोटोकॉल-हैंडलिंग –

+0

सभी को धन्यवाद, लेकिन मैं अपने आवेदन के लिए कुछ प्रोटोकॉल पंजीकृत नहीं करना चाहता हूं। मैं सिर्फ "असमर्थित प्रोटोकॉल" अपवाद के बिना यूआरएल वर्ग का उपयोग करने में सक्षम होना चाहता हूं। मैं यूआरएल स्ट्रिंग को पार्स और साफ करने के लिए यूआरएल क्लास का उपयोग कर रहा हूं। – frankish

उत्तर

3

मैं 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); 
     } 
    } 
}