Я практикуюсь в создании приложения с использованием API фильмов.Идея такова:
1 - пользователь вводит название фильма.
2 - возьмите это имя и поместите его в виде ссылки, например:
Constants.URL_LEFT+ searchTerm + Constants.URL_RIGHT + Constants.API_KEY
И здесь у меня есть две вероятности:
1 - введенные слова верны и соответствуют названию фильманапример («Бэтмен»), тогда все правильно.
2 - неверно введенное слово, например («Бамтан»), тогда у меня появляется сообщение об ошибке «Нет значения для поиска»
Примечание:
1 - Я пытаюсь использовать метод onErrorResponse (), но он работает только в noInternetConnection!
2 - Я пытаюсь решить проблему с помощью try / catch, Мое приложение осталось в подвохеarea!
Мой вопрос: Как я могу обработать неправильный ввод (неправильный URL)?
Вот мой код для этого:
public List<Movie> getMovies(final String searchTerm){
movieList.clear();
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, Constants.URL_LEFT + searchTerm + Constants.URL_RIGHT + Constants.API_KEY,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray moviesArray = response.getJSONArray("Search");
for (int i = 0 ; i < moviesArray.length() ; i++){
JSONObject movieObj = moviesArray.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(movieObj.getString("Title"));
movie.setYear(" Released on : " + movieObj.getString("Year"));
movie.setMovieType("Type : " + movieObj.getString("Type"));
movie.setPoster(movieObj.getString("Poster"));
movie.setImdbId(movieObj.getString("imdbID"));
movieList.add(movie);
}
// notify the adapter for changes! very important...
movieRecyclerViewAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
// app just save the exception and repeat it after that for correct values also!
if (e.getMessage().equals("No value for Search")){
Toast.makeText(MainActivity.this, "Can not find any movie with this name!", Toast.LENGTH_SHORT).show();
MainActivity.this.onRestart();
popupDialog();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// dealing with losing network connection
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setTitle("Error Found!")
.setMessage("Make Sure you have a network Connection!")
.setCancelable(false);
alertDialogBuilder.setPositiveButton("Refresh", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// re-check the internet connection!
getMovies(searchTerm);
}
})
.setNegativeButton("Exit!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// close the App!
finish();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
queue.add(objectRequest);
return movieList;
}
Заранее большое спасибо!