2015-03-15 2 views
0

У меня есть метод HTTP Post и Get. Сначала метод post Http post явно работает, и аутентификация прошла успешно, но на втором этапе я хочу взять данные о том, что ı хочет выбрать, к сожалению, объект Json возвращает null.Запрос метода Http GET для Android

После основного кода:

@Override 
    protected Void doInBackground(Void... unused) { 
     List<NameValuePair> params=new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("login","userno")); 
    params.add(new BasicNameValuePair("password", "pass")); 
    params.add(new BasicNameValuePair("Accept","application/json")); 
    params.add(new BasicNameValuePair("Content-type","x-www-form-urlencoded; charset=UTF-8")); 


     veri_string=post.httpPost(url, "GET", params, 2000); 
     try { 
      veri_json=new JSONObject(veri_string); 





     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Log.d("HTTP POST CEVAP",""+veri_json); 


     return null; 
    } 

Мои сообщения Класс Код:

try { 

     if (method == "POST") { 

      HttpParams httpParameters = new BasicHttpParams(); 
      int timeout1 = time; 
      int timeout2 = time; 
      HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1); 
      HttpConnectionParams.setSoTimeout(httpParameters, timeout2); 
      DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 
      HttpPost httpPost = new HttpPost(url); 

      httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      veri = httpEntity.getContent(); 

     } else if (method == "GET") { 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      String paramString = URLEncodedUtils.format(params, HTTP.UTF_8); 
      url += "?" + paramString; 
      HttpGet httpGet = new HttpGet(url); 
      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      veri = httpEntity.getContent();    
     } 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       veri, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     veri.close(); 
     veri_string = sb.toString(); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Hata " + e.toString()); 
      } 

    return veri_string; // Aldığımız cevabın string halini geri dönüyoruz 

МОЯ веб апи URL: http://ogrenci.izmir.edu.tr/api/ogrenciders

{ "Id": 2602, "OgrenciNo": «OgrenciAdiSoyadi»: null, «OgretimYili»: 2014, «OgretimDonemi»: 1, «AldigiDersIdNo»: 0.0, «AldigiSube»: null, «OgretimYiliAdi»: «2014-2015», «OgretimDonemiAdi»: «Güz Dönemi "" DersKodu ":" CEN 431 "," DersAdi ":" VERİ İLETİŞİMİ "," Sinif ": 4," SinifAdi ":" 4. sınıf», "Vize1": 0, "Vize2": 0, "Vize3": 0, "Vize4": 0, "Vize5": 0, "Vize6": 0, "Vize7": 0, "Vize8": 0 , «Vize9»: 0, «Vize10»: 0, «Final»: 0, «Butunleme»: 0, «EkSinav»: 0, «Vize1Adi»: «Vize 70», «Vize2Adi»: «Quiz 64" , «Vize3Adi»: "Назначение

И, наконец, я беру подобную ошибку enter image description here

ответ

0

в вашем методе AsyncTask doInBackground вы должны вернуть то, что вы пытаетесь получить. В вашем случае, вы хотите JSon строку

try { 
    veri_json=new JSONObject(veri_string); 
} 

В настоящее время вы возвращение нулевой, так что эта переменная не передается обратно в класс вызывающего абонента.

Кроме того, вы захотите вернуть эту переменную в методе onPostExecute. Таким образом, doInBackground возвращает что-то (String), а затем onPostExecute получает строку (ее автоматическая, так как это методы Override Asynctask), а затем тот же метод onPostExecute возвращает результат (полученную строку) классу вызывающего, обычно с интерфейс.

+0

Спасибо за ответ @TooManyEduardos Я новый разработчик в android I, насколько я понимаю, я должен переменный (строка) на postExecute, и вы можете дать мне конкретный экземпляр – Mercur

+0

, и проблема у вас в том, что на конец doInBackground вы возвращаете null, а это означает, что вы ничего не делаете с результатом. Поэтому это зависит от того, что вы хотите сделать, чтобы использовать это, но если вы хотите использовать результат doInBackground где-то в другом месте, вам нужно вернуть его в класс и поток вызывающего, и поскольку вы используете Asynctask, Самый простой способ сделать это - использовать onPostExecute – TooManyEduardos

+0

Попробуйте этот веб-сайт: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html#concurrency_asynchtask – TooManyEduardos

Смежные вопросы