Я разрабатываю приложение Android, которое использует запрос GET
для получения списка фильтров в ответе JSON
. Эта часть приложения работала с момента его первой реализации до недавнего времени. Я работал над другими частями проекта, когда заметил, что запуск приложения и открытие действия, которое извлекает фильтры, перестало работать и приведет к исключению, несмотря на то, что эта часть проекта не была затронута какими-либо прямыми изменениями кода ,
У меня есть активность, которая вызывает сервер и получает список фильтров: FindMeARestaurantActivity
и имеет AsyncTask
с именем GetFiltersTask
, который гарантирует, что эта задача не выполняется на уровне пользовательского интерфейса. Я использую DAO
с именем restaurantDAO
, который выполняет вызов HttpURLConnection. Именно в этом классе происходит исключение. Когда я отлаживаю и вхожу в restaurantDAO.getFilters()
, возникает исключение, когда я пытаюсь перешагнуть через строку connection.connect()
и получаю эту ошибку: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.lang.Iterable.iterator()' on a null object reference
. Я понятия не имею, почему это происходит, поскольку я не касался этого кода, конечная точка по-прежнему отправляет ответ JSON
(проверено в браузере), и я не знаю, откуда берется это значение null
. Вот мой AsyncTask
и getFilters()
метод в DAO
соответственно:
public class GetFiltersTask extends AsyncTask<String, Integer, List<CheckboxDTO>> {
@Override
protected void onPreExecute() {
pbProgressBar.setVisibility(View.VISIBLE);
pbProgressBar.setProgress(0);
}
@Override
protected void onProgressUpdate(Integer... integers) {
pbProgressBar.setProgress(integers[0]);
}
@Override
protected List<CheckboxDTO> doInBackground(String... strings) {
String serverResponse = restaurantDAO.getFilters();
try
{
// Create JSON Object with contents of server response
JSONObject jsonResponseObject = new JSONObject(serverResponse);
// Grab the JSON Array of filters from the JSON Object
JSONArray jsonResponseArray = jsonResponseObject.getJSONArray("filters");
// For loop to iterate through each returned filter from server, generate a checkbox for them,
// then append those to the linear layout
for (int i = 0; i < jsonResponseArray.length(); i++)
{
// Create CheckboxDTO object
CheckboxDTO checkboxDTO = new CheckboxDTO();
// Grab JSON Object out of JSON Array
JSONObject objects = jsonResponseArray.getJSONObject(i);
// Grab the ID and Value from JSON Object
int id = objects.getInt("id");
String name = objects.getString("name");
// Assign JSON Object's key/value pair to CheckboxDTO's private fields
checkboxDTO.setId(id);
checkboxDTO.setValue(name);
// Add the CheckboxDTO to the checkboxes array
checkboxes.add(checkboxDTO);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return checkboxes;
}
protected void onPostExecute(List<CheckboxDTO> result) {
super.onPostExecute(result);
pbProgressBar.setVisibility(View.GONE);
makeCheckboxes(result);
}
}
И
@Override
public String getFilters() {
String inputLine;
String result;
try
{
// Create URL object to hold URL
URL filterURL = new URL(filtersURL);
// Create connection to server
HttpURLConnection connection = (HttpURLConnection) filterURL.openConnection();
// Set connection methods and timeouts
connection.setRequestMethod(FILTERS_REQUEST_METHOD);
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECTION_TIMEOUT);
// Connect to server
connection.connect();
// Create InputStreamReader to read response from server
InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
// Create BufferedReader to read through InputStream
BufferedReader reader = new BufferedReader(streamReader);
StringBuilder stringBuilder = new StringBuilder();
// Check if the line being read is not null
while ((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
// Close out InputStream and BufferedReader
reader.close();
streamReader.close();
// Set result to our inputLine with stringBuilder
result = stringBuilder.toString();
connection.disconnect();
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
return result;
}
Ошибка трассировки стека:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.chooseurfood, PID: 4108
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.lang.Iterable.iterator()' on a null object reference
at java.net.CookieManager.get(CookieManager.java:214)
at com.android.okhttp.internal.http.HttpEngine.networkRequest(HttpEngine.java:714)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:223)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
at dao.FindMeARestaurantDAO.getFilters(FindMeARestaurantDAO.java:146)
at com.chooseurfood.ui.FindMeARestaurantActivity$GetFiltersTask.doInBackground(FindMeARestaurantActivity.java:219)
at com.chooseurfood.ui.FindMeARestaurantActivity$GetFiltersTask.doInBackground(FindMeARestaurantActivity.java:204)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Буду признателен за любую помощь в решении этой проблемы.