アンドロイドでオートコンプリートの問題に直面しています。アクティビティそのもののデータをハードコーディングするのではなく、一致したすべてのキープレスで他のアプリケーションからデータを動的に読み込もうとしました。私のプログラムの下で私が間違っている場所を教えてください。アンドロイドのオートコンプリートがダイナミックデータで動作しない
注:初めてキーを押すと、結果にデータが入力されます。その後、入力したテキストをクリアして別の文字を入力すると、結果は自動完成ドロップダウンボックスに表示されなくなります。私はすべてのキープレスで他のアプリケーションから取得していますが、自動完全なドロップダウンボックスに入力されていません。
私はtextView.showDropDown()で試行しました。およびadapter.setNotifyOnChange(true);オプション。しかし、使用しないでください。
package com.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class HelloAutoCompleteActivity extends Activity {
List countries = new ArrayList();
String url = ""; //some application url
AutoCompleteTextView textView;
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
textView.addTextChangedListener(new CostomTextWatcher());
textView.setThreshold(1);
adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);
textView.setAdapter(adapter);
}
private class CostomTextWatcher implements TextWatcher {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.length() > 0) {
countries.clear();
String readTwitterFeed = readFeed(s.toString());
System.out.println(readTwitterFeed);
try {
JSONObject menuObject = new JSONObject(readTwitterFeed);
JSONArray menuitemArray = menuObject
.getJSONArray("objectNameList");
for (int i = 0; i < menuitemArray.length(); i++) {
System.out.println(menuitemArray.get(i));
countries.add(menuitemArray.get(i).toString());
}
// adapter.notifyDataSetChanged();
// adapter.setNotifyOnChange(true);
// textView.setAdapter(adapter);
// textView.setThreshold(1);
// textView.setAdapter(adapter);
// textView.showDropDown();
// adapter.setNotifyOnChange(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public String readFeed(String val) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(
url);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
System.out.println("200");
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
System.out.println("else block");
Log.e(HelloAutoCompleteActivity.class.toString(),
"Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
}
です。ろ過プロセスが自動的に処理され、なぜフィルタリングしようとしていますか?もっと説明できますか? –
これを手伝ってもらえますか?さらに進めるには? –