如何修复“预期的URL方案'http'或'https',但没有找到冒号”错误?

2022-09-04 22:50:38

在我的应用中,我尝试使用片段中的哈希映射与 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的值。感谢您的帮助


答案 1

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

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

此外,您似乎从未使用名为 .也许您打算在 switch 语句中使用它?value


答案 2

在我的情况下,我忘记在改造创建中添加“基本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()

推荐