Ошибка "java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY"
В моем приложении кнопка отправляет из текстового поля запрос на сервер и дальше я пытаюсь посредством API получить ответ от сервера.
Мой запрос получается в формате JSON:
{
"prompt": "Какой-то текст от меня"
}
С сервера приходит ответ:
{
results:
[
{
text: "Какой-то текст от сервера"
}
]
}
Мне нужно ответный текст от сервера поместить отобразить в приложении. Разумеется, если я пытаюсь это сделать, то мне выдает ошибку java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY... Знаю, ошибка распространенная и в сети много решений, но у меня так и не получилось ни одно из них адаптировать под себя. Заранее большое спасибо за помощь.
Основной код:
public class MainActivity extends AppCompatActivity {
private EditText textInput;
private Button postDataBtn;
private TextView responseView;
private ProgressBar loadingPB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textInput = findViewById(R.id.idEdtName);
postDataBtn = findViewById(R.id.idBtnPost);
responseView = findViewById(R.id.idTVResponse);
loadingPB = findViewById(R.id.idLoadingPB);
postDataBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textInput.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "Please enter both the values", Toast.LENGTH_SHORT).show();
return;
}
postData(textInput.getText().toString());
}
});
}
private void postData(String prompt) {
loadingPB.setVisibility(View.VISIBLE);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://адрес-сайта")
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitAPI retrofitAPI = retrofit.create(RetrofitAPI.class);
DataModal modal = new DataModal(prompt);
Call<DataModal> call = retrofitAPI.createPost(modal);
call.enqueue(new Callback<DataModal>() {
@Override
public void onResponse(Call<DataModal> call, Response<DataModal> results) {
Toast.makeText(MainActivity.this, "Data added to API", Toast.LENGTH_SHORT).show();
loadingPB.setVisibility(View.GONE);
textInput.setText("");
DataModal responseFromAPI = results.body();
String responseString = responseFromAPI.getResults();
responseView.setText(responseString);
}
@Override
public void onFailure(Call<DataModal> call, Throwable t) {
responseView.setText("Error found is : " + t.getMessage());
}
});
}
}
public class DataModal {
// string variables for our name and job
private String prompt;
private String results;
public DataModal(String prompt) {
this.prompt = prompt;
}
public String getResults() {
return results;
}
}
Код API-интерфейса:
public interface RetrofitAPI {
@POST("generate")
Call<DataModal> createPost(@Body DataModal dataModal);
}
Источник: Stack Overflow на русском