«Исключение нулевого указателя» при доступе к объекту json по URL - PullRequest
0 голосов
/ 11 февраля 2011

Я пытаюсь получить доступ к объекту json, используя следующий код

http://epubreader.XXXXXXX.net/public/json/books.json

        try
       {
          InputStream in = openHttpConnection("http://epubreader.feathersoft.net
          /public/json/books.json"); 
          Data=new byte[in.available()];
          in.read(Data);
        }
       catch(IOException e)
           {
           Log.e("url", e.getLocalizedMessage()+e.getCause()+e.getStackTrace());    
           }


   }

   private InputStream openHttpConnection(String url_send) throws IOException
   {

        InputStream in = null;
        int response = -1;

        URL url = new URL(url_send);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
           throw new IOException("Not an HTTP connection");

        try {
           HttpURLConnection httpConn = (HttpURLConnection) conn;
           httpConn.setAllowUserInteraction(false);
           httpConn.setInstanceFollowRedirects(true);
           httpConn.setRequestMethod("GET");
           httpConn.connect();

           response = httpConn.getResponseCode();
           if (response == HttpURLConnection.HTTP_OK) {
              in = httpConn.getInputStream();
           }
        } catch (Exception ex) {
           throw new IOException("Error connecting");
        }
        return in;
    }


  }   

Тогда я получил исключение Nullpointer. Я не могу понять, что это, пожалуйста, помогите мне

Спасибо за ваше время

1 Ответ

1 голос
/ 11 февраля 2011

На какой линии находится NPE? Если ответ! = HttpURLConnection.HTTP_OK, то openHttpConnection вернет ноль, и вы получите NPE для in.read (Data). Возможно, вы захотите сделать что-то подобное.

if (response == HttpURLConnection.HTTP_OK) {
     in = httpConn.getInputStream();
} else {
     throw new IOException("Bad Response Received");
}

А также вам не нужен блок try и catch в openHttpConnection, просто позвольте ему генерировать IOException и обрабатывать его, как в приведенном выше коде.

Возможно, будет удобнее использовать классы Apache HttpClient в SDK. Нечто подобное.

HttpClient client = AndroidHttpClient.newInstance("myUserAgent");
HttpGet httpGet = new HttpGet("http://epubreader.feathersoft.net
          /public/json/books.json");
HttpResponse response = client.execute(httpGet);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    InputStream inputStream = response.getEntity().getContent();
    // read from stream
}

Вы также можете использовать execute с анонимным ResponseHandler, чтобы ваш метод возвращал List в случае успеха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...