0

autocompleteTextViewを実行しようとしています。Wikiの例を試しています。Wikiの場合は機能します。しかし、私自身のAPIの場合、それは機能しません。姓で電話をかけようとしています。jSonObjectを使ってみました。しかし、私はいくつかの間違いを犯しているようです。これが私のコードです。

public class WikiSuggestActivity extends Activity {
public String data;
public List<String> suggest;
public AutoCompleteTextView autoComplete;
public ArrayAdapter<String> aAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    suggest = new ArrayList<String>();
    autoComplete = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
    autoComplete.addTextChangedListener(new TextWatcher(){

        public void afterTextChanged(Editable editable) {
            // TODO Auto-generated method stub

        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub

        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            String newText = s.toString();
            new getJson().execute(newText);
        }

    });

}
   class getJson extends AsyncTask<String,String,String>{

@Override
protected String doInBackground(String... key) {
    String newText = key[0];
    newText = newText.trim();
    newText = newText.replace(" ", "+");
    try{
        HttpClient hClient = new DefaultHttpClient();
//      HttpGet hGet = new HttpGet("http://en.wikipedia.org/w/api.php?action=opensearch&search="+newText+"&limit=8&namespace=0&format=json");

            HttpGet hGet = new HttpGet("http://api.xyz.com?response_format=json&version=2.0&name="+newText);
        ResponseHandler<String> rHandler = new BasicResponseHandler();
        data = hClient.execute(hGet,rHandler);
        suggest = new ArrayList<String>();
        JSONArray jArray = new JSONArray(data);
        JSONObject mJsonObject = new JSONObject();
        for(int i=0;i<jArray.getJSONArray(1).length();i++){
        String SuggestKey = jArray.getJSONArray(1).getString(i);
//          mJsonObject = jArray.getJSONObject(i);
//          mJsonObject.getString("lastname");
        suggest.add(SuggestKey);
        }

    }catch(Exception e){
        Log.w("Error", e.getMessage());
    }

    return null;
}
   public void onPostExecute(Void result) {
       aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,suggest);
       autoComplete.setAdapter(aAdapter);
       aAdapter.notifyDataSetChanged();
   }

   }
}

これが私のJSONとその有効なJSONです

{
"body": {
    "players": [
        {
            "firstname": "abc",
            "lastname": "def"
        },
        {
            "firstname": "xyz",
            "lastname": "abc"
        },
  ]
},
"statusCode": 200

}

4

1 に答える 1

1

編集:

このようにjsonを解析します

JSONObject obj=new JSONObject(data);
JSONObject obj2=obj.getJSONObject("body");
JSONArray array=obj2.getJSONArray("players");
for(int i=0;i<array.length();i++)
{
JSONObject playerinfo=array.getJSONObject(i);
String lastname=playerinfo.getString("lastname");
suggest.add(lashname);
}

結果を返すことで doInBackGround から結果を取得し、 onPostExecute で使用できます。

doInBackground が UI スレッドで実行されていないため、非 UI スレッドから UI を更新しようとしています。

このコードをonPostExecuteに入れます

  aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,suggest);
             autoComplete.setAdapter(aAdapter);
             aAdapter.notifyDataSetChanged();

doInBackground で値を返すことで提案を取得できます

タイプ ArrayList の doInBackground を取得し、提案を返します

メソッドパラメーターとして onPostExecute で提案し、それをアダプターに渡します

于 2013-03-08T16:05:29.423 に答える