我有一个AutoCompleteTextView
我需要从MySQL
表中建议名称。我以前只用过一次硬编码一个string array
.
我在这个链接上只看到了一个例子,它真的没有多大帮助。我需要用AsyncTask
. 我知道如何处理这AsynTask
部分,但这是我的问题:
我将不得不发送键入为 a 的短语的每个param
部分task
。我从哪里得到这个文本string
?
我能看到的唯一方法是TextWatcher
可能。是这样吗,还是有其他方法?
我有一个AutoCompleteTextView
我需要从MySQL
表中建议名称。我以前只用过一次硬编码一个string array
.
我在这个链接上只看到了一个例子,它真的没有多大帮助。我需要用AsyncTask
. 我知道如何处理这AsynTask
部分,但这是我的问题:
我将不得不发送键入为 a 的短语的每个param
部分task
。我从哪里得到这个文本string
?
我能看到的唯一方法是TextWatcher
可能。是这样吗,还是有其他方法?
是这样吗,还是有其他方法?
你只需要一些机制来“观察”你的输入框中的变化,并且提到了如何实现它的最正确方法TextWatcher
因此,实现它并在某些提供TextWatcher
例如onTextChanged()的方法中,从输入框分配数据并将它们作为参数发送给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
组件而无需通过构造函数传递它们。
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
}
}
如何添加 AsynTask 波纹管代码
公共类 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;
}
}