2016-09-18 868 views
-1

到對象我有一個WCFWebservice,其中發送一個數據模型,我得到這個AndroidJSon(通過實體框架),任何方式, 我可以成功拿到JSON這個代碼和存儲所有JSON對象在JSONArrayAsyncTas類,並在:轉換JSONArray使用GSON fromJson方法

public class Consume extends AsyncTask<Void, Void, Void> { 

      InputStream inputStream = null; 
      String result = ""; 
      private ArrayList<Contact> contacts = new ArrayList<Contact>(); 

     @Override 
      protected Void doInBackground(Void... params) { 
       String URL = "http://x.x.x.x/MyWCF/Service1.svc/rest/getContact"; 
       ArrayList<NameValuePair> param = new ArrayList<NameValuePair>(); 
       try { 
        HttpClient httpClient = new DefaultHttpClient(); 
        HttpPost post = new HttpPost(URL); 
        post.setEntity(new UrlEncodedFormEntity(param)); 
        HttpResponse httpResponse = httpClient.execute(post); 
        HttpEntity httpEntity = httpResponse.getEntity(); 
        //post.setHeader("content-type", "application/json"); 
        inputStream = httpEntity.getContent(); 

       } catch (UnsupportedEncodingException e1) { 
        Log.e("UnsupportedEncoding", e1.toString()); 
        e1.printStackTrace(); 
       } catch (ClientProtocolException e2) { 
        Log.e("ClientProtocolException", e2.toString()); 
        e2.printStackTrace(); 
       } catch (IllegalStateException e3) { 
        Log.e("IllegalStateException", e3.toString()); 
        e3.printStackTrace(); 
       } catch (IOException e4) { 
        Log.e("IOException", e4.toString()); 
        e4.printStackTrace(); 
       } 
       try { 
        BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 

        StringBuilder sBuilder = new StringBuilder(); 

        String line = null; 
        while ((line = bReader.readLine()) != null) { 
         sBuilder.append(line + "\n"); 
        } 
        inputStream.close(); 
        result = sBuilder.toString(); 
       } catch (Exception e) { 
        Log.e("StringBuilding", "Error converting result " + e.toString()); 
       } 
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void aVoid) { 
       super.onPostExecute(aVoid); 
       try { 
        JSONObject object = new JSONObject(result); 
        JSONArray jArray = object.getJSONArray("getContactResult"); //here i create the JsonArray of all JsonObjects 

//Here is the solutions, We make a list of out Contact and make it as down 

      List<Contact> contacts; 
      Type listType = new TypeToken<List<Contact>>() { 
      }.getType(); 
      contacts= new Gson().fromJson(String.valueOf(jArray), listType); 

//And here solution is ended ! 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

和我android創建聯繫人class,這段代碼:

public class Contact { 


@SerializedName("name") 
    private String name; 

     @SerializedName("lastName") 
     private String lastName; 

     @SerializedName("phoneNumber") 
     private String phoneNumber; 

     @SerializedName("latitude") 
     private String latitude; 

     @SerializedName("longitude") 
     private String longitude; 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getName() { 
      return name; 
     } 

     public void setLastName(String lastName) { 
      this.lastName = lastName; 
     } 

     public String getLastName() { 
      return lastName; 
     } 

     public void setPhoneNumber(String phoneNumber) { 
      this.phoneNumber = phoneNumber; 
     } 

     public String getPhoneNumber() { 
      return phoneNumber; 
     } 

     public void setLatitude(String latitude) { 
      this.latitude = latitude; 
     } 

     public String getLatitude() { 
      return latitude; 
     } 

    public void setLongitude(String longitude) { 
     this.longitude = longitude; 
    } 

    public String getLongitude() { 
     return longitude; 
    } 
} 

我用舊的方式解析這個JSONArray! 通過這種方法:

 ArrayList<Contact> setFields(JSONArray jsonArray) { 
     ArrayList<Contact> contacts = new ArrayList<Contact>(); 
      for(int i=0; i<jsonArray.length(); i++) { 
       try { 
        Contact contact = new Contact(); 
        JSONObject object = (JSONObject) jsonArray.get(i); 
        contact.setName(object.getString("name")); 
        contact.setLastName(object.getString("lastName")); 
        contact.setPhoneNumber(object.getString("phoneNumber")); 
        contact.setLatitude(object.getString("latitude")); 
        contact.setLongitude(object.getString("longitude")); 
        contacts.add(contact); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      return contacts; 
     } 

它的工作原理,但我不想來處理,並通過這種舊的方式,並想用GSON代替解析JSONArray,任何人可以幫我這個樣? 這是我JSONArrayJSON對象:

{ 
    "getContactResult": [ 
    { 
     "id": 2041, 
     "lastName": "xxxx", 
     "latitude": xxx, 
     "longitude": xxx, 
     "name": "xxxx", 
     "phoneNumber": "xxxx" 
    } 
    ] 
} 

THX

+0

Gson文檔還不清楚嗎?此外,也許你應該看看與Gson轉換器 –

+0

Retrofit您可以嘗試使用[鏈接](http://stackoverflow.com/questions/8371274/how-to-parse-json-array-in-android-with-gson ) – asdcvf

回答

5
import com.google.gson.reflect.TypeToken; 
import java.lang.reflect.Type; 

List<Contact> contacts;  
Type listType = new TypeToken<List<Contact>>() { 
        }.getType(); 
contacts= new Gson().fromJson(jsonArray, listType); 

這應該工作。確保你的模型類具有與json參數和數據類型相同的名稱。它會解析jsonarray到輸入java

+0

Thx哥們,我在你說之前就做過了,但是thx和jsonArray應該在Gson方法中作爲String傳遞,所以它應該是:String.valueOf(jArray) 並且我在編輯時創建了我的Contact fileds SerializedName。 在這裏你可以看到編輯。 –

0

這已經回答了名單,但我想分享一個事情you.Easy和最佳途徑

有一個插件GSON爲Android工作室。您需要安裝。然後轉到CTRL +插入。 您可以創建gson文件。 爲java文件輸入一些名稱。

點擊該文件,然後粘貼你的json數據。點擊確定。 你可以看到你創建的json爲gson格式。

感謝希望這會幫助你。

+1

偉大的人,Thx很多 這樣一個偉大的解決方案 –

+0

我的榮幸(Y) – Saveen