0

どのようにこのデータをModelクラスに受け取りますか?getter setterやgetter setterのようなモデルクラスを作りたいと思います。データを受け取るモデルクラスを作る方法

は、私は私が作りたいので、Modelクラス は基本的に私は別のクラスではない変数にそれを保存したいモデルクラス

は、ここに私のコード

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { 

    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     /* dialog = new ProgressDialog(MainActivity.this); 
     dialog.setMessage("Loading, please wait"); 
     dialog.setTitle("Connecting server"); 
     dialog.show(); 
     dialog.setCancelable(false);*/ 
     Toast.makeText(getApplicationContext(), "fetch data from server", Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    protected Boolean doInBackground(String... urls) { 
     try { 

      //------------------>> 

      HttpGet httpGet = new HttpGet(urls[0]); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = httpclient.execute(httpGet); 
      int status = response.getStatusLine().getStatusCode(); 

      if (status == 200) { 
       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 


       JSONArray jsonarray = new JSONArray(data); 

       latLngList.clear(); 
       for (int i = 0; i < jsonarray.length(); i++) { 
        JSONObject obj = jsonarray.getJSONObject(i); 

        longitudeServer = obj.getString("longi"); 
        latitudeServer = obj.getString("lati"); 
        uniqueidSserver = obj.getString("uniqueid"); 

        LatLng latLng = new LatLng(Double.parseDouble(latitudeServer), Double.parseDouble(longitudeServer)); 
        latLngList.add(latLng); 

       } 


       return true; 

      } 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return false; 


    } 

    protected void onPostExecute(Boolean result) { 

     Toast.makeText(getApplicationContext(), "Receicve data from server", Toast.LENGTH_LONG).show(); 

     if (result == false) { 
      Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show(); 

     } 
     try { 

      if (marker != null) { 
       mMap.clear(); 
       Toast.makeText(getApplicationContext(), "Remove", Toast.LENGTH_LONG).show(); 

      } 
      for (LatLng object : latLngList) 

       marker = mMap.addMarker(new MarkerOptions().title("User Name").position(object).icon(BitmapDescriptorFactory.fromResource(R.drawable.female4))); 

      System.out.println(marker.getPosition() + " Marker position......."); 
     } catch (Exception e) { 
      Toast.makeText(MainActivity.this, "Error ", Toast.LENGTH_LONG).show(); 
      // mMap.clear(); 
     } 

    } 

答えて

1

@Guillaume答えが正しいですが、あなたの新しいMyServerををインスタンス化して使用することができ、そのゲッター/セッターをやったら、私はより良いとより高速な方法を提案したいと思います。サードパーティ製のライブラリLoganSquareを使用して、モデルをJSONとの間でシリアライズおよびパースすることができます。モデルに注釈を付け、LoganSquareクラスを使用してデータを解析するだけです。

それはこのようになりますあなたのケースでは、(クラス名とフィールド上の注釈に細心の注意を払う)

@JsonObject 
public class MyServer { 

    @JsonField(name = "longi") 
    public String longitudeServer; 

    @JsonField(name = "lati") 
    public String latitudeServer; 

    @JsonField(name = "uniqueid") 
    public String uniqueidSserver; 

    public MyServer(){ 
    // blank constructor is required 
    } 
} 

今、サーバから受信したJSONレスポンスを解析するためにLoganSquare静的クラスを使用します。

for (int i = 0; i < jsonarray.length(); i++) { 
    MyServer s = LoganSquare.parse(jsonarray.getJSONObject(i).toString(), MyServer.class); 

    LatLng latLng = new LatLng(Double.parseDouble(s.getLatidude()), Double.parseDouble(s.getLongitude())); // Use your server's methods 
    latLngList.add(latLng); 

} 
+0

Rafy Bhaiここでエラーが発生しました。 for(int i = 0; i Ahmad

+0

マイモデルクラスである @JsonObjectパブリッククラスModelClass { @JsonField(名= "longi") パブリック文字列longitudeServer。 @JsonField(名前= "lati") public String latitudeServer; @JsonField(name = "uniqueid") public String uniqueidSserver; public String getLongitude(){ return longitudeServer; } public String getLatitude(){ return latitudeServer; } public String getUniqueId(){ return uniqueidSserver; }パブリックModelClass(){// ブランクコンストラクタが } // ...詳細セッターを必要と}ここで – Ahmad

+0

を をゲッタリングdoInBackgroundの実行中にエラーが発生している() ModelClass S = LoganSquare.parse(jsonarray .getJSONObject(i).toString()、ModelClass.class); – Ahmad

1

です>最初に、JSONObjectから新しいインスタンスを作成するためのコンストラクタallwingを使用して、目的のモデルをクラスに定義します。

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { 
    class MyServer { 

     private String longitudeServer; 
     private String latitudeServer; 
     private String uniqueidSserver; 

     public MyServer(JSONObject obj){ 
      try{ 
       longitudeServer = obj.getString("longi"); 
       latitudeServer = obj.getString("lati"); 
       uniqueidSserver = obj.getString("uniqueid"); 
      }catch(JSONException jse){ 
       e.printStackTrace(); 
      } 
     } 

     public String getLongitude(){ 
      return longitudeServer; 
     } 

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

     //... More setter and getter here 
    } 
    // ... The existing code of your async task here 
} 

これは

for (int i = 0; i < jsonarray.length(); i++) { 
     JSONObject obj = jsonarray.getJSONObject(i); 
     MyServer s = new MyServer(obj); // Create your server from the JSONObject 
     LatLng latLng = new LatLng(Double.parseDouble(s.getLatidude()), Double.parseDouble(s.getLongitude())); // Use your server's methods 
     latLngList.add(latLng); 

    } 
+0

Guillaumeこれらの行は私にエラーを表示します public MyServer(JSONObject obj){ longitudeServer = obj.getString( "longi"); latitudeServer = obj.getString( "lati"); uniqueidSserver = obj.getString( "uniqueid"); } – Ahmad

+0

Thanksssssssssssss Guillaume私は再び問題を解決しました – Ahmad

+0

@Ahmad public MyServer(JSONObject obj)はメソッドではなく、クラスMyServerのコンストラクタです。新しいクラス "MyServer"を作成する必要があります。あなたは新しいファイルMyServer.javaや既存のコードを使って内部クラスとして行うことができます...あなたが与えたエラーメッセージは、あなたがメソッドを作成しようとしているように見えます... – Nirekin

関連する問題