2016-04-07 19 views
1

WCF servisime Volley üzerinden bir GET isteği yapmaya çalışıyorum ve bir Java ArrayList cevabını ayrıştırmak istiyorum. Ben JSON yanıtını ancak ArrayList<Company> döner boş almak mümkünAndroid Parse Json Java ArrayList'e Yanıt

{"GetCompaniesResult":[{"CompanyId":1,"CompanyName":"CompanyName1"},{"CompanyId":2,"CompanyName":"CompanyName2"}]} 

: İşte benim yöntem

public ArrayList<Company> getCompanies(){ 

     String url = AUDITTRACKINGAPP_SERVICE_URI + "GetCompanies"; 
     String tagJsonReq = "companiesRequest"; 

     final ProgressDialog pDialog = new ProgressDialog(context); 
     pDialog.setMessage("Please Wait..."); 
     pDialog.show(); 

     final ArrayList<Company> companies = new ArrayList<Company>(); 

     JsonObjectRequest companiesRequest = new JsonObjectRequest( Request.Method.GET, url, null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 

         Log.v(TAG, "COMPANIES RESPONSE:" + response.toString()); 

         try { 
          JSONArray companiesJson = response.getJSONArray("GetCompaniesResult"); 

          for (int i = 0; i < companiesJson.length(); i++) { 

           JSONObject jObject = (JSONObject)companiesJson.get(i); 

           Company company = new Company(); 
           company.setCompanyId(Integer.parseInt(jObject.getString("CompanyId"))); 
           Log.v(TAG, "COMPANIES setCompanyId:" + jObject.getString("CompanyId")); 
           company.setCompanyName(jObject.getString("CompanyName")); 
           Log.v(TAG, "COMPANIES setCompanyName:" + jObject.getString("CompanyName")); 

           companies.add(company); 
          } 

         } catch (JSONException e) { 
          Log.v(TAG, "COMPANIES RESPONSE ERROR ON PARSING JSON:" + e.getMessage()); 
         } 

         pDialog.hide(); 
        } 
       }, 
       new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.v(TAG, "COMPANIES onErrorResponse:" + error.getMessage()); 
        pDialog.hide(); 
       } 
      }); 

    AppController.getInstance().addToRequestQueue(companiesRequest, tagJsonReq); 

    return companies; 
} 

JSON TEPKİ olduğunu. Ben onResponse bir calback yöntemi olduğunu düşünüyorum ve başka bir iş parçacığı içinde çalışır bu yüzden listeyi doldurmak değil ama ben bir Android acemi olduğum için bu sorunu nasıl yönetileceğini bilmiyorum. Herhangi bir yardım takdir edilecektir.

+1

Günlükte çıktı alıyor musunuz? –

+0

Evet, JSON yanıtı @AiyazParmar – Tartar

+0

'un başarıyla yürütme döngüsünü gördüğümü görüyorum? –

cevap

0

JsonObjectRequest çünkü ana iş parçacığı çalışmaya devam etmesi ve yeni bir iş parçacığı JsonObjectRequest çalıştırmak için oluşturulan Bunun uyumsuz çalışır ve sonuç getirileriniz boş olmasıdır. örneğin, geri veri göndermek ve json verilerini yönetme bitince onu aramak için sınıfında bir yöntem çağrı:

public void manageCompaniesData(ArrayList<Company>){ 

    //YOUR CODE HERE. 

} 
modifiye

Kodunuz:

public ArrayList<Company> getCompanies(){ 

String url = AUDITTRACKINGAPP_SERVICE_URI + "GetCompanies"; 
     String tagJsonReq = "companiesRequest"; 

     final ProgressDialog pDialog = new ProgressDialog(context); 
     pDialog.setMessage("Please Wait..."); 
     pDialog.show(); 

     final ArrayList<Company> companies = new ArrayList<Company>(); 

     JsonObjectRequest companiesRequest = new JsonObjectRequest( Request.Method.GET, url, null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 

         Log.v(TAG, "COMPANIES RESPONSE:" + response.toString()); 

         try { 
          JSONArray companiesJson = response.getJSONArray("GetCompaniesResult"); 

          for (int i = 0; i < companiesJson.length(); i++) { 

           JSONObject jObject = (JSONObject)companiesJson.get(i); 

           Company company = new Company(); 
           company.setCompanyId(Integer.parseInt(jObject.getString("CompanyId"))); 
           Log.v(TAG, "COMPANIES setCompanyId:" + jObject.getString("CompanyId")); 
           company.setCompanyName(jObject.getString("CompanyName")); 
           Log.v(TAG, "COMPANIES setCompanyName:" + jObject.getString("CompanyName")); 

           companies.add(company); 
          } 

         } catch (JSONException e) { 
          Log.v(TAG, "COMPANIES RESPONSE ERROR ON PARSING JSON:" + e.getMessage()); 
         } 
         manageCompaniesData(companies); 
         pDialog.hide(); 
        } 
       }, 
       new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.v(TAG, "COMPANIES onErrorResponse:" + error.getMessage()); 
        pDialog.hide(); 
       } 
      }); 

    AppController.getInstance().addToRequestQueue(companiesRequest, tagJsonReq); 

    } 
+0

Bu yüzden bir Yanıtı geçiyor.Senkronize olmayan yanıtı yönetmek için çağrı dinleyicisi –

+0

Ancak bu dinleyici diğer iş parçacığında –

+0

onResponse() her zaman UI iş parçacığı üzerinde çalışır –

-1

herhangi JSON istisna çıkarsan Logcat, bunu bir kez dene.

for (int i = 0; i < companiesJson.length(); i++) { 

          JSONObject jObject = companiesJson.getJSONObject(i); 
          Company company = new Company(); 
          company.setCompanyId(Integer.parseInt(jObject.getString("CompanyId"))); 
          Log.v(TAG, "COMPANIES setCompanyId:" + jObject.getString("CompanyId")); 
          company.setCompanyName(jObject.getString("CompanyName")); 
          Log.v(TAG, "COMPANIES setCompanyName:" + jObject.getString("CompanyName")); 
          companies.add(company); 
} 
+0

Soruyu bile okuyor musunuz? – Tartar

+0

"Log.v (TAG," COMPANIES setCompanyId: "+ jObject.getString (" CompanyId ")) sonucunu alıyor musunuz?"; logcat içinde. –

+0

Evet, lütfen soruyu okuyun. – Tartar

0

JSONArray nesneler, bu kodu deneyin

JSONObject jObject = companiesJson.getJSONObject(i); 

yerine

JSONObject jObject = (JSONObject)companiesJson.get(i); 

arasında kullanmak zorunda bir işlevi getJSONObject(int index) var. yerine Sen beyan etmeyin loop.Also json dizinin her öğesi

try { 
          JSONArray companiesJson = response.getJSONArray("GetCompaniesResult"); 

          for (int i = 0; i < companiesJson.length(); i++) { 


        JSONObject obj = Website.getJSONObject(i); 


           Company company = new Company(); 
           company.setCompanyId(Integer.parseInt(obj.getString("CompanyId"))); 
           Log.v(TAG, "COMPANIES setCompanyId:" + obj.getString("CompanyId")); 
           company.setCompanyName(obj.getString("CompanyName")); 
           Log.v(TAG, "COMPANIES setCompanyName:" + obj.getString("CompanyName")); 

           companies.add(company); 
          } 

         } catch (JSONException e) { 
          Log.v(TAG, "COMPANIES RESPONSE ERROR ON PARSING JSON:" + e.getMessage()); 
         } 
5

ait

for (int i = 0; i < companiesJson.length(); i++) { 
    JSONObject jObject = companiesJson.getJSONObject(i); 
    Company company = new Company(); 
    company.setCompanyId(jObject.getInt("CompanyId"))); 
    company.setCompanyName(jObject.getString("CompanyName")); 
    companies.add(company); 
} 

ArrayList şirket olarak final.

Company company = new Company(); 
JSONObject jObject = (JSONObject)companiesJson.optJSONObject(i); 
if(jObject != null){ 
    company.setCompanyId(jObject.optInt("CompanyId"))); 
    company.setCompanyName(jObject.optString("CompanyName")); 
} 
+0

Şimdiden bunu burada yapıyor: JSONObject jObject = (JSONObject) firmalarıJson.get (i); –

0

Ayrıştırma sen for içi şöyle JSON json nesnesi oluşturmak için gereken

for (int i = 0; i < companiesJson.length(); i++) { 
    JSONObject jObject = (JSONObject)companiesJson.get(i); 
    Company company = new Company(); 
    company.setCompanyId(Integer.parseInt(jObject.getString("CompanyId"))); 
    Log.v(TAG, "COMPANIES setCompanyId:" + jObject.getString("CompanyId")); 
    company.setCompanyName(jObject.getString("CompanyName")); 
    Log.v(TAG, "COMPANIES setCompanyName:" + jObject.getString("CompanyName")); 

    companies.add(company); 
}