Значение ranked_group типа java .lang.String не может быть преобразовано в JSONObject - PullRequest
0 голосов
/ 30 марта 2020

Я создаю приложение, которое подключено к базе данных 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 API MovieDB

это URL API ссылка API MovieDB

...