2017-03-27 6 views
-1

オブジェクトを通じて私は私がそのカスタムクラス内の値を横断して配置する必要がありますサンプルJSONを持っている運賃アクセスInnerClassはOuterClassが

public class Flight { 
    private String airlineCode; 
    private String airlineClass; 
    private String originCode; 
    private String destinationCode; 
    private String departureTime; 
    private String ArrivalTime; 

    public Flight (String originCode,String destinationCode,String departureTime,String arrivalTime, 
        String airlineCode, String airlineClass){ 
     this.originCode=originCode; 
     this.destinationCode=destinationCode; 
     this.departureTime=departureTime; 
     this.ArrivalTime=arrivalTime; 
     this.airlineCode=airlineCode; 
     this.airlineClass=airlineClass; 

    } 

    public String getAirlineCode() { 
     return airlineCode; 
    } 

    public void setAirlineCode(String airlineCode) { 
     this.airlineCode = airlineCode; 
    } 

    public String getAirlineClass() { 
     return airlineClass; 
    } 

    public void setAirlineClass(String airlineClass) { 
     this.airlineClass = airlineClass; 
    } 

    public String getOriginCode() { 
     return originCode; 
    } 

    public void setOriginCode(String originCode) { 
     this.originCode = originCode; 
    } 

    public String getDestinationCode() { 
     return destinationCode; 
    } 

    public void setDestinationCode(String destinationCode) { 
     this.destinationCode = destinationCode; 
    } 

    public String getDepartureTime() { 
     return departureTime; 
    } 

    public void setDepartureTime(String departureTime) { 
     this.departureTime = departureTime; 
    } 

    public String getArrivalTime() { 
     return ArrivalTime; 
    } 

    public void setArrivalTime(String arrivalTime) { 
     ArrivalTime = arrivalTime; 
    } 

    //Inner Class 
    class Fare{ 
     private String providerId; 
     private String fare; 

     public Fare(String providerId,String fare){ 
      this.providerId=providerId; 
      this.fare=fare; 
     } 

     public String getProviderId() { 
      return providerId; 
     } 

     public String getFare() { 
      return fare; 
     } 
    } 
} 

のフライトと内部クラスのカスタムクラスを持つオブジェクト。以下はJSONの短いサンプルです。

{ 
    "flights": [ 
    { 
     "originCode": "DEL", 
     "destinationCode": "BOM", 
     "departureTime": 1396614600000, 
     "arrivalTime": 1396625400000, 
     "fares": [ 
     { 
      "providerId": 1, 
      "fare": 11500 
     }, 
     { 
      "providerId": 2, 
      "fare": 10500 
     } 
     ], 
     "airlineCode": "G8", 
     "class": "Business" 
    }, 
    { 
     "originCode": "DEL", 
     "destinationCode": "BOM", 
     "departureTime": 1396616400000, 
     "arrivalTime": 1396623600000, 
     "fares": [ 
     { 
      "providerId": 1, 
      "fare": 14400 
     }, 
     { 
      "providerId": 3, 
      "fare": 14000 
     } 
     ], 
     "airlineCode": "AI", 
     "class": "Business" 
    } 
    ] 
} 

私は今、私はフライトのオブジェクトがクリックされた方のためにInnerClassオブジェクトにアクセスする必要がある。この

public static final ArrayList<Flight> extractdata(String jsonResponse) { 
     ArrayList<Flight> flights = new ArrayList<Flight>(); 

     try { 
      JSONObject rootobject = new JSONObject(jsonResponse); 

      JSONArray flight = rootobject.getJSONArray("flights"); 

      for (int i = 0; i < flight.length(); i++) { 
       JSONObject arrayObject = flight.getJSONObject(i); 

       String originCode = arrayObject.getString("originCode"); 
       Log.d(LOG_TAG,"originalcode"+ originCode); 
       String destinationCode = arrayObject.getString("destinationCode"); 
       Log.d(LOG_TAG,"destinationcode"+ destinationCode); 
       String departureTime = arrayObject.getString("departureTime"); 
       Log.d(LOG_TAG,"departuretime"+ departureTime); 
       String arrivalTime = arrayObject.getString("arrivalTime"); 
       Log.d(LOG_TAG,"arrivaltime"+ arrivalTime); 
       String airlineCode = arrayObject.getString("airlineCode"); 
       Log.d(LOG_TAG,"airlinecode"+ airlineCode); 
       String airlineClass = arrayObject.getString("class"); 
       Log.d(LOG_TAG,"class"+ airlineClass); 
       Long eTime = Long.parseLong(arrivalTime); 
       Date dateObject = new Date(eTime); 
       Long dTime = Long.parseLong(departureTime); 
       Date dateObject2 = new Date(dTime); 
       SimpleDateFormat dateFormat = new SimpleDateFormat("HH mm "); 
       String arrival = dateFormat.format(dateObject); 
       String depart = dateFormat.format(dateObject2); 
       JSONArray arrayFare=arrayObject.getJSONArray("fares"); 

       String providerId; 
       String fare; 
       int number=arrayFare.length(); 
       Flight flightObject=new Flight(originCode,destinationCode,depart,arrival,airlineCode,airlineClass); 
       for (int j=0;j<arrayFare.length();j++){ 
        JSONObject arrayFareObject=arrayFare.getJSONObject(j); 
        providerId=arrayFareObject.getString("providerId"); 
        fare=arrayFareObject.getString("fare"); 
        Log.d(LOG_TAG,"providerId & fare :"+providerId+" "+fare); 
        Flight.Fare fareObject[]= new Flight.Fare[number]; 
        fareObject[j]=flightObject.new Fare(providerId,fare); 
       } 
       flights.add(flightObject); 
      }  
     } catch (JSONException e) { 
      Log.e(LOG_TAG, "problem parsing jsone", e); 
     } 
     return flights;  
    } 

のようにArrayListのを解析して作成しています。それ、どうやったら出来るの。私はそれらのオブジェクトにアクセスすることができません。

私はこのようにしています。

public void updateUi(final ArrayList<Flight> flights1) 
{ 

    final FlightAdapter flightAdapter=new FlightAdapter(this,flights1); 
    ListView flightlistview=(ListView)findViewById(R.id.list); 
    flightlistview.setAdapter(flightAdapter); 
    flightlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      Flight flight=flightAdapter.getItem(position); 
      Intent fareintent=new Intent(FlightSearchActivity.this,FareActivity.class); 
      startActivity(fareintent); 
     } 
    }); 
} 
+1

'Flight'クラスのプロパティとして' Fare'オブジェクトが必要です。データでこのプロパティを取得および設定します。 –

+0

@Prera​​kSola疑念を取り除くための例を挙げることができれば、それは多くの助けになります。前もって感謝します。 –

答えて

1

フライトクラスにはFareオブジェクトが必要です。

これを行うと、特定のフライトオブジェクトに接続されていないFareタイプのオブジェクトが作成されます。

... 
private String destinationCode; 
private String departureTime; 
private String ArrivalTime; 
Fare fare; 

編集:

Flight.Fare fareObject[]= new Flight.Fare[number]; 
fareObject[j]=flightObject.new Fare(providerId,fare); 

代わりに、あなたのFligtクラス内の他の変数と一緒に運賃オブジェクトを宣言

.. 
ArrayList<Fare> fares; 
+0

ありがとうございます。私はあなたのことを理解しました。しかし、運賃はダイナミックなので、私はリスト運賃を取らなければならなかった。 しかし、主な疑念は、外部オブジェクトを介して内部オブジェクトにアクセスすることでしたが、それを直接行う方法はありませんでしたか? –

2

各フライトには異なる航空会社からの運賃がたくさんあるため、これを行うには1つの方法があります。各フライトのプロパティとして、FaresのArrayListを持つことができます。

List<Fare> fares 

次に、jsonレスポンスを読んでいる間に、個別のFareクラスインスタンスを読み込んで作成し、これらのインスタンスを料金リストに追加することができます。個々のフライトのすべての運賃をリストに追加したら、このリストをフライトインスタンスの運賃プロパティとして設定します。今すぐフライトインスタンスに flight.setFares(fares)

を運賃リストを追加

List<Fare>fares=new ArrayList<Fare>(); 
//This code should be in a loop so you can add all the fares to the ArrayList 

Fare f=new Fare(); 
f.setProviderId("AI"); 
f.setFare("12000"); 

fares.add(f); 

は、この情報がお役に立てば幸いです。

+0

ありがとうございます。出来た。だから私は直接外部オブジェクトを介してInnerObjectにアクセスする方法はありませんか? –

1

変更飛行の複数の運賃のための運賃の配列を追加するには、 Flightクラス:

public class Flight { 
    private String airlineCode; 
    private String airlineClass; 
    private String originCode; 
    private String destinationCode; 
    private String departureTime; 
    private String ArrivalTime; 
    private List<Fare> fares; 

    public Flight (String originCode,String destinationCode,String departureTime,String arrivalTime, String airlineCode, String airlineClass, List<Fare> fares){ 
     this.originCode=originCode; 
     this.destinationCode=destinationCode; 
     this.departureTime=departureTime; 
     this.ArrivalTime=arrivalTime; 
     this.airlineCode=airlineCode; 
     this.airlineClass=airlineClass; 
     this.fares = fares; 
    } 
    ... //Other getters and setters 

    public List<Fare> getFares() { 
     return fares; 
    } 

    public void setFares(List<Fare> fares) { 
     this.fares = fares; 
    } 

    ... //Inner class code 
} 
012あなたの extractdata方法で今

public static final ArrayList<Flight> extractdata(String jsonResponse) { 
     ArrayList<Flight> flights = new ArrayList<Flight>(); 

     try { 
      JSONObject rootobject = new JSONObject(jsonResponse); 

      JSONArray flight = rootobject.getJSONArray("flights"); 

      for (int i = 0; i < flight.length(); i++) { 
       JSONObject arrayObject = flight.getJSONObject(i); 

       String originCode = arrayObject.getString("originCode"); 
       String destinationCode = arrayObject.getString("destinationCode"); 
       String departureTime = arrayObject.getString("departureTime"); 
       String arrivalTime = arrayObject.getString("arrivalTime"); 
       String airlineCode = arrayObject.getString("airlineCode"); 
       String airlineClass = arrayObject.getString("class"); 
       Long eTime = Long.parseLong(arrivalTime); 
       Date dateObject = new Date(eTime); 
       Long dTime = Long.parseLong(departureTime); 
       Date dateObject2 = new Date(dTime); 
       SimpleDateFormat dateFormat = new SimpleDateFormat("HH mm "); 
       String arrival = dateFormat.format(dateObject); 
       String depart = dateFormat.format(dateObject2); 
       JSONArray arrayFare = arrayObject.getJSONArray("fares"); 

       List<Fare>fares=new ArrayList<Fare>(); 

       for (int j=0;j<arrayFare.length();j++){ 
        JSONObject arrayFareObject = arrayFare.getJSONObject(j); 
        String providerId = arrayFareObject.getString("providerId"); 
        String fare = arrayFareObject.getString("fare"); 
        Flight.Fare fareObject = new Flight.Fare(providerId, fare); 
        fares.add(fareObject); 
       } 
       Flight flightObject = new Flight(originCode, destinationCode, depart, arrival, airlineCode, airlineClass, fares); 
       flights.add(flightObject); 
      } 


     } catch (JSONException e) { 
      Log.e(LOG_TAG, "problem parsing jsone", e); 
     } 
     return flights;  
    } 

今すぐあなたの updateUi機能では、あなたが getFaresメソッドを呼び出すことによって faresを取得することができます:

警告
public void updateUi(final ArrayList<Flight> flights1) { 

    final FlightAdapter flightAdapter = new FlightAdapter(this,flights1); 
    ListView flightlistview = (ListView)findViewById(R.id.list); 
    flightlistview.setAdapter(flightAdapter); 
    flightlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Flight flight = flightAdapter.getItem(position); 
      List<Fare> fares = flight.getFares(); //This will have all the fares. 
      Intent fareintent = new Intent(FlightSearchActivity.this,FareActivity.class); 

      startActivity(fareintent); 

     } 
    }); 
} 

:私はこのコードをテストしていませんが、それはこれらに類似したものでなければなりません。

+0

ありがとうございました。 –

関連する問題