我有AutoCompleteTextView
我需要在MySQL
表中建议名称。我之前只用过string array
。
我在this链接上只看到过一个例子,它确实没什么帮助。我需要使用AsyncTask
执行此操作。我知道如何处理AsynTask
部分,但这是我的问题:
我将不得不将param
的{{1}}的每个部分发送为task
。我在哪里可以获得此文string
?
我能看到的唯一方法是TextWatcher
。那会是它,还是有另一种方法?
答案 0 :(得分:1)
那就是它,还是有另一种方法?
您只需要一些机制来“观察”输入框中的更改,并提及如何实现它的最正确方法TextWatcher
所以实现它并在一些为onTextChanged()提供TextWatcher
的方法中,从inputbox分配数据并将它们作为参数发送到 AsyncTask 和 onPostExecute( )方法为AutoCompleteTextView
创建新适配器,其中包含从MySQL
检索到的数据,并将适配器分配给您的小部件,然后就可以获得它。
<强>的伪代码:强>
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 1) {
insertString = s.toString();
new YourTask().execute(insertString);
}
}
并在AsyncTask中执行以下操作:
protected List<String> doInBackground() {
// fetchning data from MySQL
return list;
}
public void onPostExecute(List<String> result) {
if (!result.isEmpty()) {
SomeAdapter adp = new SomeAdapter(context, layout, result);
actv.setAdapter(adp);
}
}
注意:在您的情况下,您可以更轻松地制作AsyncTask
类的Activity
内部课程,并且可以直接访问UI
个组件而无需传递它们通过构造函数。
答案 1 :(得分:1)
AutoCompleteTextView
已经为您处理了这个问题。
基本上,默认情况下,当确定需要过滤列表时,它会调用performFiltering
方法。
因此,如果要重用现有逻辑,只需创建一个覆盖AutoCompleteTextView
方法的performFiltering
子类,然后放置执行过滤的代码(在您的情况下为AsyncTask调用)。像这样:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;
public class MyAutoCompleteTextView extends AutoCompleteTextView {
public MyAutoCompleteTextView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void performFiltering(CharSequence text, int keyCode) {
//Here the AutompleteTextView has determined that the list should be filtered
}
}
答案 2 :(得分:0)
如何添加AsynTask Bellow代码
公共类MainActivity扩展了Activity {
AutoCompleteTextView txtSearch;
PeopleAdapter adapter;
List<People> mList;
TextView idd;
ImageView imgspn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mList = retrievePeople();
txtSearch = (AutoCompleteTextView) findViewById(R.id.txt_search);
adapter = new PeopleAdapter(this, R.layout.activity_main, R.id.lbl_name, mList);
txtSearch.setThreshold(1);
txtSearch.setAdapter(adapter);
idd = (TextView) findViewById(R.id.idd);
imgspn = (ImageView) findViewById(R.id.imgspn);
imgspn.setVisibility(View.INVISIBLE);
txtSearch.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String Name = mList.get(position).getId();
idd.setText(Name);
}
});
}
private List<People> retrievePeople() {
List<People> list = new ArrayList<People>();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.0.1:3306/stud", "root",
"Windouspass");
Statement st = (Statement) con.createStatement();
ResultSet rs = (ResultSet) st.executeQuery(
"select name,designation_name,id from umdlv_users ut,t_designation td where ut.designation_id = td.designation_id");
while (rs.next()) {
list.add(new People(rs.getString(1), rs.getString(2), rs.getString(3)));
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
}
return list;
}
}