我面臨的問題與自動完成在Android中。我沒有在Activity本身中對數據進行硬編碼,而是試圖在每個匹配的按鍵上從其他應用程序動態讀取數據。請在我的程序下面找到並告訴我我錯在哪裏。Android中的自動完成與動態數據無法工作
注意:在第一次按鍵時,結果正在填充。之後,如果我清除輸入的文本並輸入不同的字符,則結果不會顯示在自動完成下拉框中。我從每個按鍵上的其他應用程序獲取,但未在自動完成下拉框中填充。
我試着用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();
}
}
我想你應該再讀AutocompleteEditText的概念。自動處理過濾過程,爲什麼你要過濾?你能解釋一下嗎? – 2011-12-28 08:04:03
你能幫我解決這個問題嗎?如何進一步進行? – 2011-12-28 10:26:10