Я создаю приложение, которое подключено к базе данных mov ie (movieDB) с помощью API, но данные, которые я наблюдаю, не отображаются в моем приложении, вместо этого они только непрерывно отображают индикатор загрузки без отображения данных, даже хотя значение ключа для всех данных, которые я приравнивал к API из базы данных mov ie, и после того, как я попытался отладить исходный код, из logcat появляется сообщение об ошибке java .lang.string не может быть преобразовано в jsonobject. Пожалуйста, предоставьте решение, есть ли неправильный исходный код ниже?
MovieViewModel. java
public class ViewModelMovie extends ViewModel {
private final static String API_KEY = "d7c7987ce4142eb6f6d3824587a35627";
private MutableLiveData<ArrayList<ItemMovie>> listMovies = new MutableLiveData<>();
public void setItemMovies(final String movies){
AsyncHttpClient client = new AsyncHttpClient();
final ArrayList<ItemMovie> listItem = new ArrayList<>();
String url = "https://private-5d1b4-themoviedbmock.apiary-mock.com/3/discover/movie?api_key="+API_KEY+"&language=en-US";
client.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
String movie_result = new String(responseBody);
JSONObject object_response = new JSONObject(movie_result);
JSONArray listArray = object_response.getJSONArray("results");
for (int i = 0; i < listArray.length();i++){
JSONObject objectJson = listArray.getJSONObject(i);
ItemMovie itemMovie = new ItemMovie(objectJson);
listItem.add(itemMovie);
}
listMovies.postValue(listItem);
} catch (Exception e) {
Log.d("Exception",e.getMessage());
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.d("onFailure",error.getMessage());
}
});
}
public LiveData<ArrayList<ItemMovie>> getMovies(){
return listMovies;
}
}
MovieFragment. java
public class MoviesFragment extends Fragment {
private MovieAdapter adapter;
private ProgressBar progressBar;
public MoviesFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_movies, container, false);
RecyclerView recyclerView = view.findViewById(R.id.rv_movies);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapter);
progressBar = view.findViewById(R.id.progress_movie);
ViewModelMovie modelMovie = new ViewModelProvider(this).get(ViewModelMovie.class);
modelMovie.getMovies().observe(getViewLifecycleOwner(),getMovie);
showLoading(true);
return view;
}
private Observer<ArrayList<ItemMovie>> getMovie = new Observer<ArrayList<ItemMovie>>() {
@Override
public void onChanged(ArrayList<ItemMovie> itemMovies) {
if (itemMovies != null){
adapter.setData(itemMovies);
}
showLoading(false);
}
};
private void showLoading(boolean state){
if (state){
progressBar.setVisibility(View.VISIBLE);
}
else {
progressBar.setVisibility(View.GONE);
}
}
}
MovieItem. java
public class ItemMovie implements Parcelable {
private String imgMovie;
private String titleMovie;
private String overMovie;
private String langMovie;
private String releaseMovie;
protected ItemMovie(Parcel in) {
imgMovie = in.readString();
titleMovie = in.readString();
overMovie = in.readString();
langMovie = in.readString();
releaseMovie = in.readString();
}
public static final Creator<ItemMovie> CREATOR = new Creator<ItemMovie>() {
@Override
public ItemMovie createFromParcel(Parcel in) {
return new ItemMovie(in);
}
@Override
public ItemMovie[] newArray(int size) {
return new ItemMovie[size];
}
};
public String getImgMovie() {
return imgMovie;
}
public void setImgMovie(String imgMovie) {
this.imgMovie = imgMovie;
}
public String getTitleMovie() {
return titleMovie;
}
public void setTitleMovie(String titleMovie) {
this.titleMovie = titleMovie;
}
public String getOverMovie() {
return overMovie;
}
public void setOverMovie(String overMovie) {
this.overMovie = overMovie;
}
public String getLangMovie() {
return langMovie;
}
public void setLangMovie(String langMovie) {
this.langMovie = langMovie;
}
public String getReleaseMovie() {
return releaseMovie;
}
public void setReleaseMovie(String releaseMovie) {
this.releaseMovie = releaseMovie;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(imgMovie);
dest.writeString(titleMovie);
dest.writeString(overMovie);
dest.writeString(langMovie);
dest.writeString(releaseMovie);
}
public ItemMovie(JSONObject object){
try {
String image_movie = object.getString("poster_path");
String title_movie = object.getString("title");
String overview_movie = object.getString("overview");
String language_movie = object.getString("original_language");
String release_movie = object.getString("release_date");
this.imgMovie = image_movie;
this.titleMovie = title_movie;
this.overMovie = overview_movie;
this.langMovie = language_movie;
this.releaseMovie = release_movie;
} catch (Exception e) {
e.printStackTrace();
}
}
}
это отображение API
это URL API ссылка API MovieDB