我该如何解决此错误“ android中的java.net.MalformedURLException:找不到协议:”

问题描述

| 我在android中收到
java.net.MalformedURLException: Protocol not found:
错误。 我如何解决这个问题,我想尝试很长时间却没有找到解决方案。请帮我
05-24 12:22:48.885: WARN/System.err(1358): java.net.MalformedURLException: Protocol not found: 
05-24 12:22:48.905: WARN/System.err(1358):     at java.net.URL.<init>(URL.java:273)
05-24 12:22:48.935: WARN/System.err(1358):     at java.net.URL.<init>(URL.java:157)
05-24 12:22:48.935: WARN/System.err(1358):     at com.bestdambikers.Updates$EfficientAdapter$4.onClick(Updates.java:354)
05-24 12:22:48.935: WARN/System.err(1358):     at android.view.View.performClick(View.java:2485)
05-24 12:22:48.935: WARN/System.err(1358):     at android.view.View$PerformClick.run(View.java:9080)
05-24 12:22:48.965: WARN/System.err(1358):     at android.os.Handler.handleCallback(Handler.java:587)
05-24 12:22:48.965: WARN/System.err(1358):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-24 12:22:48.965: WARN/System.err(1358):     at android.os.Looper.loop(Looper.java:123)
05-24 12:22:48.975: WARN/System.err(1358):     at android.app.ActivityThread.main(ActivityThread.java:3647)
05-24 12:22:48.985: WARN/System.err(1358):     at java.lang.reflect.Method.invokeNative(Native Method)
05-24 12:22:48.985: WARN/System.err(1358):     at java.lang.reflect.Method.invoke(Method.java:507)
05-24 12:22:48.985: WARN/System.err(1358):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-24 12:22:48.995: WARN/System.err(1358):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-24 12:22:49.025: WARN/System.err(1358):     at dalvik.system.NativeStart.main(Native Method)
这是我出错的代码...
strUrl = \"http://192.168.5.156/html/maykal/maykalvirtue/index.PHP?option=com_ijoomer&plg_name=jomsocial&pview=user&ptask=activities&sessionid=\"+ ConstantData.session_id + \"\";
parser = new XmlParser(strUrl,new UpdatesBean());
result = parser.ParseUrl(\"data\",\"update\");
UpdatesBean updatesBean = (UpdatesBean) result.get(position);

ConstantData.pos = position;
Log.e(\"POSITION OF CLICKED ROW\",\"\"+ConstantData.pos);
URL newurl = new URL(updatesBean.thumb);  //getting error at this line

bi = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
ConstantData.updateImage = bi;
ConstantData.titleTag = updatesBean.titletag;
ConstantData.updateDate = updatesBean.date;
    

解决方法

它不是在引发异常,而是在抱怨您没有处理它可能发生的可能性,即使它不会,因为这种情况下的URL格式不正确。 (Java的设计师认为,“检查异常”这一概念是一个好主意,尽管在实践中效果不佳。) 若要将其关闭,请在方法声明中添加抛出MalformedURLException或其超类抛出IOException。例如:
public void myMethod() throws IOException {
    URL url = new URL(\"https://wikipedia.org/\");
}
或者,将烦人的异常作为未检查的异常捕获并重新抛出
public void myMethod() {
    try {
        URL url = new URL(\"https://wikipedia.org/\");
        ...
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
    ,updatesBean.thumb无效的URL。特别是-它没有有效的协议。这就是要传达的信息。 它不是您的updateBean.thumb来源的代码。但是,根据名称,它可能是URI,而不是URL。打印并查看它是什么。 而且,由于它是大拇指,它可能是一个文件。 我可以建议您使用类似的方法来确定真实文件名吗?
    public String getRealPathFromURI(Uri contentUri) {
    if (contentUri.toString().startsWith(\"file://\")) {
        return contentUri.toString();
    }
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri,proj,// Which columns to
            // return
            null,// WHERE clause; which rows to return (all rows)
            null,// WHERE clause selection arguments (none)
            null); // Order-by clause (ascending by name)
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();

    return \"file://\" + cursor.getString(column_index);
}