【问题标题】:How to fix "Expected URL scheme 'http' or 'https' but no colon was found" error?如何修复“预期的 URL 方案 'http' 或 'https' 但未找到冒号”错误?
【发布时间】:2022-01-31 03:09:42
【问题描述】:

在我的应用程序中,我正在尝试使用片段中的哈希图与 API 连接。问题似乎是我连接到 API 的异步任务不想接受我的请求。错误显示预期的 URL 方案 'http' 或 'https' 但没有找到冒号

这是一个应用程序,我在其中使用微调器,因此用户可以选择,根据他的选择,将加载不同的数据。我试图在哈希映射中摆弄,但现在问题似乎出在创建任务中。

这是我启动任务的微调器


        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view,
                                       int position, long id){
            Toast.makeText(getActivity(),"Location selected: "+locations[position], Toast.LENGTH_SHORT )
                    .show();
            map.get(locations[position]);
            //create the task
                ChooseLocationTask task = new ChooseLocationTask(location, position, value);
            // start the task
                task.execute();
            }
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });

这里是异步任务的构造函数,它似乎不能正常工作:

        this.location = location;
        this.value = value;
        String url ="";
        switch(selected){
            case 1:
                url = url1.getUrl();
                break;
            case 2:
                url= url2.getUrl();
                break;
            case 3:
                url= url3.getUrl();
                break;
            case 4:
                url= url4.getUrl();
                break;
            case 5:
                url = url5.getUrl();
                break;
            case 6:
                url = url6.getUrl();
                break;
            case 7:
                url = url7.getUrl();
                break;
            case 8:
                url= url8.getUrl();
                break;
            case 9:
                url = url9.getUrl();
        }
        request = new Request.Builder().url(url).build();
    }

logcat 中的错误表示问题在于在第一个代码示例中创建任务和在第二个示例中创建请求。 我希望用户在单击微调器中的某些字段时看到来自 API 的值。感谢您的帮助

【问题讨论】:

  • 这里的 url1,2,3 是什么?它属于哪个类?
  • 我有一个特殊的 url 类,我从中获取构造函数。这里的网址只是看起来像这样的字符串:Urls url1 = new Urls("http://api.auroras.live/v1/?type=all&amp;lat=40.7813913&amp;long=-73.976902&amp;forecast=false&amp;threeday=false") ;
  • 您在评论中添加的网址是有效的。请调试您的代码,以解决正在执行的情况,可能是一个无效的 URL。在旁注中,只需将所有这些 url 放入 List 并使用索引获取它们,即 Spinner index-->List index ..
  • 我不明白为什么你有一个特殊的字符串对象。只需传递字符串,您的url 变量无论如何都会输入到字符串String url ="";。这只是 URL,而不是神经手术。
  • @reportgunner 这里不需要消极。我在 android 中开发了大概三个月,所以是的,我不知道做事的所有正确方法。但是,嘿,这就是我来这里寻求建议的原因。如果我对你来说太慢了,我很抱歉,但我没有从你的回答中得到该怎么做,坦率地说,我更愿意看到一个代码示例。

标签: java android


【解决方案1】:

网址必须以http://https://开头,您的网址为""

编辑:我看到的另一个可能的问题是您的 switch 语句中没有 default: 分支 - 如果变量 selected 的值小于 1 或大于 9,您的 url 将为空,因此不会以http://https:// 开头

另外,您似乎从不使用名为value 的变量。也许您打算在您的 switch 语句中使用它?

【讨论】:

  • 我的 url 以它开头,我将它们全部定义为我的 URL 类中的字符串,如下所示:Urls url1 = new Urls("http://api.auroras.live/v1/?type=all&amp;lat=40.7813913&amp;long=-73.976902&amp;forecast=false&amp;threeday=false") ;
  • @AlbínaMrázová switch 语句后 url 的值是多少?打印出来
  • 这就是出现错误的原因。切换大小写后 URL 值仍为空。检查以确定您的“选定”值是什么。它可能不在 1 - 9 之间,或者你对应的 url1 - url9 值为空
  • @reportgunner 我刚刚添加了默认值并记录了它。你是对的,它没有登陆任何网址,但是我不知道如何传递网址。我最初的问题是我需要用户选择他想看到的内容,并基于此他应该点击正确的端点。这就是我做switch语句的原因。但由于 url 没有登陆,我又有点迷茫了
  • this.value = value; 是什么?你不是说switch(this.value){ 吗?
【解决方案2】:

在我的例子中,我忘记在改造创建中添加 "base URL"。所以,即使在这种情况下,它也会引发错误。

错误

 return Retrofit.Builder()
        .client(okHttpClient)
        .addConverterFactory(gsonConverterFactory)
        .baseUrl(" ")  //Here I had missed url
        .build()

正确:

  return Retrofit.Builder()
        .client(okHttpClient)
        .addConverterFactory(gsonConverterFactory)
        .baseUrl(BASE_URL)   //Add URL in place of base url
        .build()

【讨论】:

    【解决方案3】:

    一个可能的解决方案是为项目添加 INTERNET 权限。 将以下行添加到 AndroidManifest.xml 文件中

    <uses-permission android:name="android.permission.INTERNET" />
    

    【讨论】:

      【解决方案4】:

      在我的情况下,我像你一样使用baseUrl

      将其更改为baseURL(URL 大写)就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2019-09-25
        • 2021-09-07
        • 2010-12-14
        • 1970-01-01
        相关资源
        最近更新 更多