2012-01-03 4 views
0

国名や国の郵便番号などの国の詳細を取得するには、xmlファイルを解析する必要があります。 どのようにスピナーアダプタに国名を解析できますか?スピンナーを使用してperticular国を選択すると、特定の国コードをtextviewに表示する必要があります。国の詳細を取得するためにローカルXMLファイルを解析する方法アンドロイド?

私を助けてください。

ありがとうございます。

答えて

1

ここでは、ローカルxmlファイルの入力ストリームを渡す必要があるXmlファイルを解析するコードを示します。ここで

public static ArrayList<Country> parseCountry(Context context, InputStream inputStream) { 
    String KEY = ""; 
    String VALUE = null; 
    ArrayList<Country> arrCountires = new ArrayList<Country>(); 
    Country country = null; 
    ArrayList<State> arrStates = null; 
    State state= null; 
    ArrayList<City> arrCities = null; 
    City city = null; 

    try { 
     InputStreamReader inputreader = null; 
     if(inputStream != null) { 
      inputreader = new InputStreamReader(inputStream); 
     } 

     if(inputreader != null) { 
      XmlPullParserFactory factory = null; 
      factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      XmlPullParser xpp = null; 
      xpp = factory.newPullParser(); 
      xpp.setInput(inputreader); 
      int eventType = 0; 
      eventType = xpp.getEventType(); 
      eventType = xpp.getEventType(); 
      while (eventType != XmlPullParser.END_DOCUMENT) { 
       if(eventType == XmlPullParser.START_TAG) { 
        KEY = xpp.getName(); 
        if(KEY.equalsIgnoreCase(TAGS.COUNTRIES)) { 
         arrCountires = new ArrayList<Country>(); 

        }else if(KEY.equalsIgnoreCase(TAGS.COUNTRY)) { 
         country = new Country(); 
         arrStates = new ArrayList<State>(); 
         country.setCountryId(xpp.getAttributeValue(null, TAGS.ID)); 

        }else if(KEY.equalsIgnoreCase(TAGS.STATE)) { 
         state = new State(); 
         arrCities = new ArrayList<City>(); 
         state.setStateId(xpp.getAttributeValue(null, TAGS.ID)); 

        }else if(KEY.equalsIgnoreCase(TAGS.CITY)) { 
         city = new City(); 
         city.setCityId(xpp.getAttributeValue(null, TAGS.ID)); 
        } 
       }else if(eventType == XmlPullParser.END_TAG) { 
        KEY = xpp.getName(); 
        if(KEY.equalsIgnoreCase(TAGS.COUNTRY)) { 
         country.setArrStates(arrStates); 
         arrCountires.add(country); 

        }else if(KEY.equalsIgnoreCase(TAGS.COUNTRY_NAME)) { 
         country.setCountryName(VALUE); 

        }else if(KEY.equalsIgnoreCase(TAGS.STATE_NAME)) { 
         state.setStateName(VALUE); 

        }else if(KEY.equalsIgnoreCase(TAGS.STATE)) { 
         state.setArrCities(arrCities); 
         arrStates.add(state); 

        }else if(KEY.equalsIgnoreCase(TAGS.CITY)) { 
         arrCities.add(city); 
        }else if(KEY.equalsIgnoreCase(TAGS.CITY_NAME)) { 
         city.setCityName(VALUE); 
        } 
       }else if(eventType == XmlPullParser.TEXT) { 
        VALUE = xpp.getText(); 
       } 
       eventType = xpp.next(); 
      } 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    }finally { 
     if(inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return arrCountires; 
} 

getterメソッドとsetterメソッドを持つ国クラスです。ここで

public class Country { 

String countryId; 
String countryName; 
ArrayList<State> arrStates; 
public ArrayList<State> getArrStates() { 
    return arrStates; 
} 
public void setArrStates(ArrayList<State> arrStates) { 
    this.arrStates = arrStates; 
} 
public String getCountryId() { 
    return countryId; 
} 
public void setCountryId(String countryId) { 
    this.countryId = countryId; 
} 
public String getCountryName() { 
    return countryName; 
} 
public void setCountryName(String countryName) { 
    this.countryName = countryName; 
} 

} 

スピナーで国を設定するためのアダプタクラスです。ここで

private class CountryAdapter implements SpinnerAdapter{ 
ArrayList<Country> data; 

public CountryAdapter(ArrayList<Country> data){ 
    this.data = data; 
} 

@Override 
public int getCount() { 
    return data.size(); 
} 

@Override 
public Object getItem(int position) { 
    return data.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return android.R.layout.simple_spinner_dropdown_item; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView v = new TextView(getApplicationContext()); 
    v.setTextColor(Color.BLACK); 
    v.setText(data.get(position).getName()); 
    v.setTextSize(15); 
    v.setPadding(10, 10, 10, 10); 
    v.setSingleLine(); 
    v.setEllipsize(TruncateAt.END); 

    return v; 
} 

@Override 
public int getViewTypeCount() { 
    return android.R.layout.simple_spinner_item; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isEmpty() { 
    return false; 
} 

@Override 
public void registerDataSetObserver(DataSetObserver observer) { 

} 

@Override 
public void unregisterDataSetObserver(DataSetObserver observer) { 

} 

@Override 
public View getDropDownView(int position, View convertView, 
    ViewGroup parent) { 
    return this.getView(position, convertView, parent); 
} 
} 

あなたはスピナーここ

OnItemSelectedListener OnCountrySelected = new OnItemSelectedListener() { 

@Override 
public void onItemSelected(AdapterView<?> arg0, View v, int position, 
     long id) { 
    if(position != AdapterView.INVALID_POSITION) { 
     System.out.println("Country name = " + arrCountries.get(position).getName()); 
     //Here you can set this value to the textview 
    } 
} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 

} 
}; 

から選択した国を得ることが可能なインタフェースを使用すると、スピナー

にリスナーを設定することができますどのような方法です
spCountry.setOnItemSelectedListener(OnCountrySelected); 

ここにinputstreとしてファイルを開くコードですあなたが国の配列に応答を取得すると、その後スピナーに

CountryAdapter countryAdapter = new CountryAdapter(arrCountry); 
      spCountry.setAdapter(countryAdapter); 
をアダプタを設定し、資産

try { 
    InputStream inputStream = v.getContext().getAssets().open("path of file"); 
    ArrayList<Country> arrCountries = parseCountry(this, inputStream); 

} catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 

から来ました

関連する問題