我怎么能在android中解决这个错误“java.net.MalformedURLException:Protocol not found:”

时间:2011-05-24 07:03:08

标签: android

我在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;

2 个答案:

答案 0 :(得分:1)

它没有引发异常,它抱怨你没有处理它可能的可能性,即使它不会,因为在这种情况下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);
    }
}

答案 1 :(得分:0)

updatesBean.thumb不是有效的URL。特别是 - 它没有有效的协议。这就是消息的内容。 这个updatesBean.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);
}