2015-01-26 1 views
-2

У меня проблема с HttpGet, которую я искал в stackoverflow и на других веб-сайтах, я даже следил за некоторыми примерами, но ничего не делал, это не сработало.Android HttpGet не работает

Это мой код:

HttpClient   client = new DefaultHttpClient(); 
    HttpGet    request = new HttpGet("http://myurl.com/getit?token=" + _token); 
    HttpResponse  response; 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    String    jsonString; 
    Gson    gson; 
    Modules[]   modulesList; 

    try { 
     response = client.execute(request); 
     //jsonString = EntityUtils.toString(response.getEntity()); 
     //gson = new GsonBuilder().setPrettyPrinting().create(); 
     //modulesList = gson.fromJson(jsonString, Modules[].class); 
    } catch (Exception e) { 
     System.out.println("FAIL: " + e.getMessage()); 
    } 

Он всегда возвращает нулевой указатель исключение. Я попытался отобразить URL-адрес, скопировать/вставить в Chrome, и на веб-сайте отображается мой JSON.

+0

Вы добавили разрешение ""? –

+0

Спасибо за ваш ответ. Да, я добавил это разрешение, на самом деле я использую HttpPost на другой странице для входа в мое приложение для Android (с тем же API), и он хорошо работает – user3824849

+0

В этом случае вы должны добавить Crash Log для более точного ответа –

ответ

0

Я обычно пишу мое так:

private String downloadUrl(String myurl) throws IOException { 
     InputStream is = null; 
     // Only display the first 500 characters of the retrieved 
     // web page content. 
     int len = 500; 

     try { 
      URL url = new URL(myurl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(READTIMEOUT /* milliseconds */); 
      conn.setConnectTimeout(CONNECTTIMEOUT /* milliseconds */); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      // Starts the query 
      conn.connect(); 
      int response = conn.getResponseCode(); 
      //check to read content body if 400 error and above occurs. 
      if (response >= HttpStatus.SC_BAD_REQUEST) 
       is = conn.getErrorStream(); 
      else 
       is = conn.getInputStream(); 

      // Convert the InputStream into a string 
      String contentAsString = readIt(is, len); 
      return contentAsString; 

      // Makes sure that the InputStream is closed after the app is 
      // finished using it. 
     } finally { 
      if (is != null) { 
       is.close(); 
      } 
     } 
    } 

    public String readIt(InputStream stream, int len) throws IOException, 
      UnsupportedEncodingException { 
     // Reader reader = null; 
     // reader = new InputStreamReader(stream, "UTF-8"); 
     // char[] buffer = new char[stream.available()]; 
     // reader.read(buffer); 
     // return new String(buffer); 

     final BufferedReader r = new BufferedReader(new InputStreamReader(
       stream)); 
     final StringBuilder total = new StringBuilder(); 
     String line; 
     while ((line = r.readLine()) != null) { 
      total.append(line); 
     } 

     return total.toString(); 
    } 

Так все, что вам нужно сделать после этого есть:

jsonString = downloadUrl("http://myurl.com/getit?token=" + _token); 
2

Проблема вполне ясна в первой строке StackTrace

/com.epitech.ferrei_j.epiandroid W/System.err: android.os.NetworkOnMainThreadException 01-26

Post 2.3 Android вам не разрешено использовать основной поток пользовательского интерфейса для выполнения задач, выполнение которых может занять некоторое время. Сетевой IO является одним из них.

Чтобы выполнить операцию в своей собственной ветке, необходимо использовать команду AsyncTask.

См. AsyncTask для примера о том, как это сделать.