Проблема с реализацией API в студии Android с использованием localhostAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Проблема с реализацией API в студии Android с использованием localhost

Сообщение Гость »


Я пытаюсь реализовать простой API для чтения данных с локального хоста. API работает нормально в POSTMAN. Однако когда я реализую его с помощью RETROFIT, он не загружает данные с локального хоста. Я обязательно проверил, принимает ли сеть ответ от 80, и все в порядке. И я также получаю еще одну ошибку для recyclerview.

Вот эти 2 ошибки:

1: RecyclerView com.sarmadali.poetryapp E Адаптер не подключен; пропуск макета

а второй:

java.lang.NullPointerException: попытка вызвать виртуальный метод int java.util.ArrayList.size() для ссылки на нулевой объект в com.sarmadali.poetryapp.Adapters.PoetryAdapters.getItemCount(PoetryAdapters.java:50)

Вот мой код MainActivity:

публичный класс MainActivity расширяет AppCompatActivity { RecyclerView recyclerViewPoetry; Адаптеры поэзии APIInterfacePoetry apiInterfacePoetry; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_main); Метод инициализации(); apiInterfacePoetry.getPoetry().enqueue(new Callback() { @Override public void onResponse (вызов Call, ответ Response) { пытаться { если (ответ!=ноль){ if (response.body().getStatus().equals("1")){ SetAdapter(response.body().getPoetryData()); }еще { Toast.makeText(MainActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); } } }catch (Исключение e){ Log.e("Отказ", e.getLocalizedMessage()); } } @Override public void onFailure(Call call, Throwable t) { Log.e("Отказ при сбое", t.getLocalizedMessage()); Toast.makeText(MainActivity.this, «Что-то пошло не так», Toast.LENGTH_SHORT).show(); } }); } частный недействительный метод инициализации () { recyclerViewPoetry = findViewById(R.id.recyclerViewPoetry); //инициализация API Модернизация модификация = ApiClient.getClient(); apiInterfacePoetry = Retrofit.create(ApiInterfacePoetry.class); // поэзияModelArrayList = новый ArrayList(); } Private void SetAdapter(ArrayList поэтические списки) { поэтические адаптеры = новые поэтические адаптеры (это, поэтические списки); //устанавливаем менеджер компоновки LinearLayoutManager LinearLayoutManager = новый LinearLayoutManager (это); recyclerViewPoetry.setLayoutManager(linearLayoutManager); recyclerViewPoetry.setAdapter(poetryAdapters); } } ApiClient.java

публичный класс ApiClient { public static Retrofit Retrofit = null; общественная статическая модернизация getClient(){ если (модернизация==ноль) { OkHttpClient okHttpClient = новый OkHttpClient.Builder().build(); Gson gson = новый GsonBuilder().create(); модификация = новый Retrofit.Builder() .baseUrl("http://192.168.10.7/PHPPoetryApis/") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create(gson)) .строить(); } возвратная модернизация; } } PoetryAdapters.java

публичный класс PoetryAdapters расширяет RecyclerView.Adapter{ Контекстный контекст; ArrayList поэтический список; //конструктор public PoetryAdapters (контекст контекста, ArrayList поэтические модели) { this.context = контекст; this.poetryList = поэтические модели; } @NonNull @Override public ViewHolderClass onCreateViewHolder(@NonNull ViewGroup родительский, int viewType) { //раздувание макета Просмотр представления = LayoutInflater.from(context).inflate(R.layout.poetry_list_view_design, null); вернуть новый ViewHolderClass(представление); } @Override public void onBindViewHolder(@NonNull ViewHolderClass Holder, int Position) { //устанавливаем все данные Holder.poetName.setText(poetryList.get(position).getP_Name()); Holder.p_Poetry.setText(poetryList.get(position).getPoetry()); Holder.dateTime.setText(poetryList.get(position).getDate_Time()); } @Override общественный ИНТ getItemCount () { вернуть поэзиюList.size(); } //класс Viewholder создан публичный класс ViewHolderClass расширяет RecyclerView.ViewHolder{ TextView поэтName, p_Poetry, dateTime; Кнопка btnUpdatePoetry, btnDeletePoetry; public ViewHolderClass(@NonNull Посмотреть itemView) { супер (предметView); поэтName = itemView.findViewById(R.id.textPoetName); p_Poetry = itemView.findViewById(R.id.textPoetry); dateTime = itemView.findViewById(R.id.textDatenTime); btnUpdatePoetry = itemView.findViewById(R.id.buttonUpdate); btnDeletePoetry = itemView.findViewById(R.id.buttonDelete); } } } ОБНОВЛЕНО

Изменение метода постановки в очередь:

apiInterfacePoetry.getPoetry().enqueue(new Callback() { @Override public void onResponse (вызов Call, ответ Response) { пытаться { if (response.isSuccessful() && response.body() != null) { if (response.body().getStatus().equals("1")) { Log.e("Поэзия статуса", response.body().getStatus()); ArrayList поэтические данные = ответ.body().getPoetryData(); если (poetryData != ноль) { SetAdapter (поэзияДанные); } еще { Toast.makeText(MainActivity.this, «Данные о поэзии имеют значение null», Toast.LENGTH_SHORT).show(); } } еще { Toast.makeText(MainActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); } Toast.makeText(MainActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); } еще { Toast.makeText(MainActivity.this, «Вызов API не удался», Toast.LENGTH_SHORT).show(); } }catch (Исключение e){ Log.e("Отказ", e.getLocalizedMessage()); } } @Override public void onFailure(Call call, Throwable t) { Log.e("Отказ при сбое", t.getLocalizedMessage()); Toast.makeText(MainActivity.this, «Что-то пошло не так», Toast.LENGTH_SHORT).show(); } }); Здесь первая проверка прошла успешно, а всплывающее уведомление имеет статус «запись доступна», как установлено в API

if (response.isSuccessful() && response.body() != null)

и второй

if (response.body().getStatus().equals("1")) он также возвращает 1 в журнале, что означает, что запись доступна.

и этот

poetryData != null

имеет значение NULL, поскольку возвращает значение NULL.

response.body().getPoetryData()

Я думаю, здесь нет никакой проблемы, связанной с сетью.

Надеюсь, это поможет ответить на мой вопрос.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»