#java #json #retrofit
#Ява #json #переоборудование
Вопрос:
В настоящее время я работаю над проектом в конце семестра. Это приложение для Android, которое будет функционировать как музыкальная база данных и магазин, и я использую API MusicBrainz для получения информации о релизах и исполнителях.
К сожалению, я застрял на очень важной части моего проекта: самом API. Я продолжаю получать эту ошибку
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
Оглядевшись в Интернете, я обнаружил, что это произошло из-за того, что сам JSON был плохо написан, однако, посмотрев еще раз и используя валидатор JSON, я понял, что это не так. Вот json, который я пытаюсь получить
{ "ipis": [], "type": "Group", "life-span": { "end": "2017-02-04", "begin": "1969", "ended": true }, "area": { "name": "United Kingdom", "id": "8a754a16-0027-3a29-b6d7-2b40ea0481ed", "type": null, "disambiguation": "", "iso-3166-1-codes": ["GB"], "type-id": null, "sort-name": "United Kingdom" }, "disambiguation": "", "type-id": "e431f5f6-b5d2-343d-8b36-72607fffb74b", "isnis": ["0000000123694269"], "name": "Black Sabbath", "begin_area": { "name": "Birmingham", "type": null, "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a", "disambiguation": "", "type-id": null, "sort-name": "Birmingham", "iso-3166-2-codes": ["GB-BIR"] }, "id": "5182c1d9-c7d2-4dad-afa0-ccfeada921a8", "gender-id": null, "end-area": { "name": "Birmingham", "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a", "type": null, "disambiguation": "", "type-id": null, "iso-3166-2-codes": ["GB-BIR"], "sort-name": "Birmingham" }, "begin-area": { "name": "Birmingham", "type": null, "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a", "disambiguation": "", "type-id": null, "sort-name": "Birmingham", "iso-3166-2-codes": ["GB-BIR"] }, "country": "GB", "sort-name": "Black Sabbath", "gender": null, "end_area": { "name": "Birmingham", "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a", "type": null, "disambiguation": "", "type-id": null, "iso-3166-2-codes": ["GB-BIR"], "sort-name": "Birmingham" } }
и вот часть моего кода:
Мой основной метод:
public class MainActivity extends AppCompatActivity { private static final String TAG = "Mainactivity"; JSONPlaceHolderArtist artistJSON; Button b; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); artistJSON = MusicBrainzAPI.getClient().create(JSONPlaceHolderArtist.class); b = findViewById(R.id.button); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getArtist(); } }); } private void getArtist() { Calllt;ArtistAPIgt; call = artistJSON.getArtist("5182c1d9-c7d2-4dad-afa0-ccfeada921a8"); call.enqueue(new Callbacklt;ArtistAPIgt;() { @Override public void onResponse(Calllt;ArtistAPIgt; call, Responselt;ArtistAPIgt; response) { Log.e(TAG,"on response: " response.body()); } @Override public void onFailure(Calllt;ArtistAPIgt; call, Throwable t) { Log.i(TAG, "on failure: " t.getLocalizedMessage()); } }); } }
Класс ArtistAPI:
public class ArtistAPI { String id, name, country, begin, end; Boolean ended; public String getArtistID() { return id; } public String getArtistName() { [...]
Интерфейс дооснащения:
public interface JSONPlaceHolderArtist { @GET("/artist/{id}/name?fmt=json") Calllt;ArtistAPIgt; getArtist(@Path("id") String id); }
и API:
public class MusicBrainzAPI { private static final String BASE_URL = "https://musicbrainz.org/ws/2/"; private static Retrofit retrofit = null; public static Retrofit getClient() { if (retrofit == null) { Gson gson = new GsonBuilder().setLenient().create(); retrofit = new Retrofit.Builder().baseUrl(BASE_URL). addConverterFactory(GsonConverterFactory.create(gson)).build(); } return retrofit; } }
Какая-нибудь помощь? Заранее спасибо!
Комментарии:
1. Не включайте ссылки на дерьмо; мы предполагаем, что это попытка передать нам вирус. Упростите JSON и включите его в вопрос.
2. извини за это, исправлено.