2011-11-09 24 views
0

現在、私はスピンナーを2つの方法で取り込むことができますが、私は必要としているのですが、スピナーのテキストはJSON形式です。 JSONから名前を抽出して使用すると、名前の値のペアの値の一部が失われます。JSONArrayとBaseAdapterの組み合わせ

私は、私が行う必要があることを行うためにBaseAdapterサブクラスを使用する必要があることを知りました。以下のコードは私が好きなように動作しますが、データはハードコードされていますが、これは役に立たないものです。

私がやりたいことは、MyDataにデータベースから返されたJSONデータを入力することです。

このコード:このBaseAdapterで

final MyData items[] = new MyData[4]; 
items[0] = new MyData("Ken's Plimbing","125738468"); 
items[1] = new MyData("Peninsula Pests","3787906453"); 
items[2] = new MyData("Joe's Electrical","129754354"); 
items[3] = new MyData("Garderning Supplies","097803452");*/ 

ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
userSpinner.setAdapter(adapter); 

userSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      MyData d = items[position]; 
      Toast.makeText(PropertyManagement.this, d.getValue(), Toast.LENGTH_SHORT).show(); 
     } 
      public void onNothingSelected(AdapterView<?> parent) { 
     } 
    } 
); 

class MyData { 
    public MyData(String spinnerText, String value) { 
     this.spinnerText = spinnerText; 
     this.value = value; 
    } 
    public String getSpinnerText() { 
     return spinnerText; 
    } 
    public String getValue() { 
     return value; 
    } 
    public String toString() { 
     return spinnerText; 
    } 
    String spinnerText; 
    String value; 

作品!

しかし、データベースから返されたJSON配列をMyDataに書き込む必要があります。私はこの記事の最初の段落にあるように次のようにしています。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(PropertyManagement.this, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

final MyData items[] = new MyData[4]; 
for (int i = 0; i < myUsers.length(); ++i) 
{ 
    adapter.add(myUsers.getJSONObject(i).getString("BusinessName")); 
}; 
userSpinner.setAdapter(adapter); 

JSONArray /文字列は次のようになり、

{"BusinessName":"Petes Plumbing","BusinessPhone":"0434943743"},{"BusinessName":"Joes Electrical","BusinessPhone":"0466367279"} 

任意の助けいただければ幸いです。

乾杯、

マイク。

答えて

0

あなたのforループにadapter.addの代わりにスーパークローズがあります。これをアイテムに追加する必要があります。このようにリファクタリング:あなたがそのサイズのMYITEMの新しい配列を作成し、あなたのJSONArrayの長さを見つけることです

final MyData items[] = new MyData[myUsers.length()]; 
for (int i = 0; i < MyData.length(); ++i){ 
    items[i] = new MyData(myUsers.getJSONObject(i).getString("BusinessName"), myUsers.getJSONObject(i).getString("BusinessPhone")); 
} 
ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
userSpinner.setAdapter(adapter); 

何ここに異なっています。次に、JSONArrayの値に基づいて新しいMyItemsでアイテムを初期化します。最後に、最初の例と同じように項目を使用してアダプタを作成します。この例では、JSONArrayのmyUsersと仮定しています。

+0

これは面白いです、私はちょうどそれを働いて、プレスを停止すると言って戻ってきました。私のコードはあなたのものとまったく同じです!説明にも感謝します。それはあなたの頭の上にすべてを取得し、あなたの答え、歓声、マイクに感謝するために少し時間がかかります。 –

関連する問題