Caused by java lang illegalargumentexception baseurl must end in

Java.lang.IllegalArgumentException: baseUrl должен завершаться/пока используется модификация 2.1.0 для метода GET

При использовании retrofit1.9.0 работают как методы post, так и get. Но используя retrofit 2.1.0 , в методе get возникает ошибка:

java.lang.IllegalArgumentException: baseUrl должен заканчиваться на /

Я проверил свой код и нет проблем, он работает для метода post.

 Retrofit retrofit= new Retrofit.Builder() .baseUrl("sample.com/ecomtest/index.php?route=api/") .addConverterFactory(GsonConverterFactory.create()) .build(); 

ОТВЕТЫ

Ответ 1

‘?’ не может в baseUrl, вы должны перенести его в интерфейс API. как это.

Полный URL: https://free-api.heweather.com/v5/now? city=yourcity&key=yourkey

поэтому baseUrl = «https://free-api.heweather.com/v5/»

@GET("now?") Observable getNowWeather(@Query("city") String city,@Query("key") String key); 

Ответ 2

URL, который вы передали как API_BASE_URL , должен заканчиваться на «/», поэтому добавьте его в конец вашего URL.

Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()); 
String API_BASE_URL = "http://www.domain.com/"; //string end with "/" 

Ответ 3

В модификации вы не можете использовать конечные точки, такие как «некоторые»? в базовом URL. Разделите свой URL как

String url="http://sample.com/ecomtest/index.php?route=api/"; String baseUrl=url.split(".com/")[0]+".com/"; String queryUrl=url.split(".com")[1]; 
Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()); 

и передать конечную точку в качестве пути к методу запроса, например

@GET("") Call getData(@Path("endpoint") String endpoint); 

Ответ 4

Разделите свой URL на две части.

String baseURL ="https://yourapi.com/"; //make sure you have '/' at the end String key = "123"; 

затем добавьте остальную часть в аннотацию GET, подобную этой @GET(«abc?def&key post-104 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized»>

Ответ 5

Была такая же ситуация и ответы здесь почти охватывают/объясняют решение. Однако не совсем так.

Я пытался сохранить BASE_URL так: sample.com/api И мои конечные точки будут для e.x: /users

Решение с добавлением / не помогло: sample.com/api/

Проблема с более чем одним / в BASE_URL , и я думаю, что модернизация сводит с ума из-за того, что косая черта не только как конечная метка.

Читайте также:  Где применяется язык javascript

Единственное решение, которое сработало: sample.com/ И конечной точкой для этого будет: api/users Таким образом, для меня решение было сохранить только один / в BASE_URL, и оставить его в конце строки основного URL

Ответ 6

Я решил эту ошибку с помощью URL = «URL/» . Должен быть/как последний символ, чтобы он работал.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

App crashes at start on current master, beta debug #3228

App crashes at start on current master, beta debug #3228

Comments

Summary:
I fetched upstream and app does not start anymore. After being logged in it crashes.

Steps to reproduce:
Start the app with current master

System logs:

2019-11-28 15:11:54.309 31899-31899/fr.free.nrw.commons.beta E/ACRA: ACRA caught a RuntimeException for fr.free.nrw.commons.beta java.lang.RuntimeException: Unable to create service fr.free.nrw.commons.upload.UploadService: java.lang.IllegalArgumentException: baseUrl must end in /: https://www./wikidata.org at android.app.ActivityThread.handleCreateService(ActivityThread.java:3414) at android.app.ActivityThread.-wrap4(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: https://www./wikidata.org at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:515) at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:458) at org.wikipedia.dataclient.ServiceFactory.createRetrofit(ServiceFactory.java:61) at org.wikipedia.dataclient.ServiceFactory.get(ServiceFactory.java:39) at fr.free.nrw.commons.di.NetworkingModule.provideWikidataInterface(NetworkingModule.java:216) at fr.free.nrw.commons.di.NetworkingModule_ProvideWikidataInterfaceFactory.proxyProvideWikidataInterface(NetworkingModule_ProvideWikidataInterfaceFactory.java:35) at fr.free.nrw.commons.di.NetworkingModule_ProvideWikidataInterfaceFactory.get(NetworkingModule_ProvideWikidataInterfaceFactory.java:24) at fr.free.nrw.commons.di.NetworkingModule_ProvideWikidataInterfaceFactory.get(NetworkingModule_ProvideWikidataInterfaceFactory.java:10) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at fr.free.nrw.commons.wikidata.WikidataClient_Factory.get(WikidataClient_Factory.java:16) at fr.free.nrw.commons.wikidata.WikidataClient_Factory.get(WikidataClient_Factory.java:7) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at fr.free.nrw.commons.wikidata.WikidataEditService_Factory.get(WikidataEditService_Factory.java:35) at fr.free.nrw.commons.wikidata.WikidataEditService_Factory.get(WikidataEditService_Factory.java:9) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at fr.free.nrw.commons.di.DaggerCommonsApplicationComponent$UploadServiceSubcomponentImpl.injectUploadService(DaggerCommonsApplicationComponent.java:3095) at fr.free.nrw.commons.di.DaggerCommonsApplicationComponent$UploadServiceSubcomponentImpl.inject(DaggerCommonsApplicationComponent.java:3090) at fr.free.nrw.commons.di.DaggerCommonsApplicationComponent$UploadServiceSubcomponentImpl.inject(DaggerCommonsApplicationComponent.java:3079) at dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:113) at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:134) at fr.free.nrw.commons.di.CommonsDaggerService.inject(CommonsDaggerService.java:28) at fr.free.nrw.commons.di.CommonsDaggerService.onCreate(CommonsDaggerService.java:15) at fr.free.nrw.commons.HandlerService.onCreate(HandlerService.java:55) at fr.free.nrw.commons.upload.UploadService.onCreate(UploadService.java:119) 

Device and Android version:

Commons app version:
betaDebug

The text was updated successfully, but these errors were encountered:

Источник

java.lang.IllegalArgumentException: baseUrl должен заканчиваться в / при использовании модернизации 2.1.0 для метода GET

Я использую Retrofit2 для разбора API. При использовании retrofit1.9.0 работают как методы post, так и get. Но используя retrofit 2.1.0 , в методе get возникает ошибка:

 Retrofit retrofit= new Retrofit.Builder() .baseUrl("sample.com/ecomtest/index.php?route=api/") .addConverterFactory(GsonConverterFactory.create()) .build(); 

Пожалуйста, не забудьте поделиться некоторым соответствующим кодом, который может помочь людям быстро решить его для вас.

Читайте также:  Visual code run python

Retrofit retrofit = new Retrofit.Builder () .baseUrl (» sample.com/ecomtest/index.php?route=api/» ) .addConverterFactory (GsonConverterFactory.create ()) .build ();

Я пытался это сделать, мой URL-адрес API «sample.com/ecomtest/index.php?route=api/login&email= enjemail coming&password= enjpassword rout‌» Я использую @Path для передачи параметров электронной почты и поля пароля. но при проверке есть проблема в «? route = api», есть ли решение, чтобы исправить ошибку

5 ответов

URL, который вы передали как API_BASE_URL , должен заканчиваться на «/», поэтому добавьте его в конец вашего URL.

Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()); 
String API_BASE_URL = "http://www.domain.com/"; //string end with "/" 

Вы добавляете «/» после «?» в URL, это означает, что он идет в качестве параметра. «sample.com/ecomtest/» и передать маршрут в параметре.

спасибо RBK, но все же проблема возникает при использовании его в Retrofit1, он отлично работает для того же base_url = «sample.com/ecomtest/index.php?route=api/»

Я сталкиваюсь с той же проблемой. мой базовый URL = «sample.com/index.php/» Конечной точкой API является «? route = api / getList» . при запуске приложения я получил URL-адрес как «sample.com/index.php/?route= api / getList «вместо» sample.com/index.php?route=api/getList «. 🙁

‘?’ не может в baseUrl, вы должны перенести его в интерфейс API. как это.

Полный URL: https://free-api.heweather.com/v5/now? city=yourcity&key=yourkey

поэтому baseUrl = «https://free-api.heweather.com/v5/»

@GET("now?") Observable getNowWeather(@Query("city") String city,@Query("key") String key); 

Разделите свой URL на две части.

String baseURL ="https://yourapi.com/"; //make sure you have '/' at the end String key = "123"; 

затем добавьте остальную часть в аннотацию GET, подобную этой @GET(«abc?def&key info»>

В модификации вы не можете использовать конечные точки, такие как «некоторые»? в базовом URL. Разделите свой URL как

String url="http://sample.com/ecomtest/index.php?route=api/"; String baseUrl=url.split(".com/")[0]+".com/"; String queryUrl=url.split(".com")[1]; 
Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()); 

и передать конечную точку в качестве пути к методу запроса, например

@GET("") Call getData(@Path("endpoint") String endpoint); 

Источник

Java.lang.IllegalArgumentException: baseUrl must end in / while using retrofit 2.1.0 for GET method

While using retrofit1.9.0 both post and get methods work properly. But using retrofit 2.1.0 , in the get method, there is an error:

java.lang.IllegalArgumentException: baseUrl must end in /

I have checked my code and there is no problem, it’s working for the post method.

 Retrofit retrofit= new Retrofit.Builder() .baseUrl("sample.com/ecomtest/index.php?route=api/") .addConverterFactory(GsonConverterFactory.create()) .build(); 

Best Solution

‘?’ can not in baseUrl, you should move it to API interface. like this.

Читайте также:  Работа с random python

The full url : https://free-api.heweather.com/v5/now? city=yourcity&key=yourkey

so, baseUrl = «https://free-api.heweather.com/v5/»

@GET("now?") Observable getNowWeather(@Query("city") String city,@Query("key") String key); 
Java – Google Gson – deserialize list object? (generic type)

Method to deserialize generic collection:

import java.lang.reflect.Type; import com.google.gson.reflect.TypeToken; . Type listType = new TypeToken>()<>.getType(); List yourClassList = new Gson().fromJson(jsonArray, listType); 

Since several people in the comments have mentioned it, here’s an explanation of how the TypeToken class is being used. The construction new TypeToken<. >() <>.getType() captures a compile-time type (between the < and >) into a runtime java.lang.reflect.Type object. Unlike a Class object, which can only represent a raw (erased) type, the Type object can represent any type in the Java language, including a parameterized instantiation of a generic type.

The TypeToken class itself does not have a public constructor, because you’re not supposed to construct it directly. Instead, you always construct an anonymous subclass (hence the <> , which is a necessary part of this expression).

Due to type erasure, the TypeToken class is only able to capture types that are fully known at compile time. (That is, you can’t do new TypeToken>() <>.getType() for a type parameter T .)

Android – How to correctly save instance state of Fragments in back stack

To correctly save the instance state of Fragment you should do the following:

1. In the fragment, save instance state by overriding onSaveInstanceState() and restore in onActivityCreated() :

class MyFragment extends Fragment < @Override public void onActivityCreated(Bundle savedInstanceState) < super.onActivityCreated(savedInstanceState); . if (savedInstanceState != null) < //Restore the fragment's state here >> . @Override public void onSaveInstanceState(Bundle outState) < super.onSaveInstanceState(outState); //Save the fragment's state here >> 

2. And important point, in the activity, you have to save the fragment’s instance in onSaveInstanceState() and restore in onCreate() .

class MyActivity extends Activity < private MyFragment public void onCreate(Bundle savedInstanceState) < . if (savedInstanceState != null) < //Restore the fragment's instance mMyFragment = getSupportFragmentManager().getFragment(savedInstanceState, "myFragmentName"); . >. > @Override protected void onSaveInstanceState(Bundle outState) < super.onSaveInstanceState(outState); //Save the fragment's instance getSupportFragmentManager().putFragment(outState, "myFragmentName", mMyFragment); >> 

Источник

Оцените статью