Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有MySQL数据的AutoCompleteTextView_Android_Mysql_Android Asynctask_Autocompletetextview - Fatal编程技术网

Android 具有MySQL数据的AutoCompleteTextView

Android 具有MySQL数据的AutoCompleteTextView,android,mysql,android-asynctask,autocompletetextview,Android,Mysql,Android Asynctask,Autocompletetextview,我有一个AutoCompleteTextView,我需要从MySQL表中建议名称。我以前只在硬编码字符串数组时使用过一次 我在link上只看到了一个例子,它实际上没有多大帮助。我需要使用异步任务执行此操作。我知道如何处理AsynTask部分,但以下是我的问题: 对于任务,我必须将短语的每一部分都作为参数发送。我从哪里可以获得此文本字符串 我能看到的唯一方法是TextWatcher也许。是这样,还是有其他方法 是这样,还是有其他方法 您只需要一些机制来“监视”输入框中的更改,最正确的实现方法是Te

我有一个
AutoCompleteTextView
,我需要从
MySQL
表中建议名称。我以前只在硬编码字符串数组时使用过一次

我在link上只看到了一个例子,它实际上没有多大帮助。我需要使用
异步任务
执行此操作。我知道如何处理
AsynTask
部分,但以下是我的问题:

对于
任务
,我必须将短语的每一部分都作为
参数
发送。我从哪里可以获得此文本
字符串

我能看到的唯一方法是
TextWatcher
也许。是这样,还是有其他方法

是这样,还是有其他方法

您只需要一些机制来“监视”输入框中的更改,最正确的实现方法是
TextWatcher

因此,实现它,并在一些提供
TextWatcher
的方法中,例如,从inputbox分配数据,并将它们作为参数发送到AsyncTask,然后在onPostExecute()方法中,使用从
MySQL
检索的数据为您的
AutoCompleteTextView
创建新适配器,并将适配器分配给您的小部件,您就得到了它

伪代码:

public void onTextChanged(CharSequence s, int start, int before, int count) {
   if (s.length() > 1) {
      insertString = s.toString();
      new YourTask().execute(insertString);                  
   }
}
在异步任务中,执行如下操作:

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);
   }
}
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
    }

}
受保护列表doInBackground(){
//从MySQL获取数据
退货清单;
}
public void onPostExecute(列表结果){
如果(!result.isEmpty()){
SomeAdapter adp=新的SomeAdapter(上下文、布局、结果);
实际设置适配器(adp);
}
}

注意:在您的情况下,将
异步任务
作为
活动
类的内部类更容易,您可以直接访问
UI
组件,而无需通过构造函数传递它们。

AutoCompleteTextView
已经为您解决了这一问题。 基本上,默认情况下,当它确定需要过滤列表时,它调用
performFiltering
方法

因此,如果要重用现有逻辑,只需创建一个子类
AutoCompleteTextView
,该子类覆盖了
performFiltering
方法,并将用于执行过滤的代码放在那里(在您的例子中是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);
   }
}
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 Bellow代码

公共类MainActivity扩展了活动{

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;
}
AutoCompleteTextView-txtSearch;
适配器;
列表列表;
文本视图idd;
ImageView imgspn;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mList=retrievePeople();
txtSearch=(AutoCompleteTextView)findviewbyd(R.id.txt\u search);
适配器=新的PeoConceAPTER(this,R.layout.activity_main,R.id.lbl_name,mList);
txtSearch.setThreshold(1);
setAdapter(适配器);
idd=(TextView)findViewById(R.id.idd);
imgspn=(ImageView)findViewById(R.id.imgspn);
imgspn.setVisibility(视图不可见);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
String Name=mList.get(position.getId();
idd.setText(名称);
}
});
}
私人列表检索人(){
列表=新的ArrayList();
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=(Connection)DriverManager.getConnection(“jdbc:mysql://192.168.0.1:3306/stud“,”根“,
“风之路”);
语句st=(语句)con.createStatement();
结果集rs=(结果集)st.executeQuery(
“从umdlv_用户ut、t_标识td中选择名称、标识_名称、id,其中ut.designation_id=td.designation_id”);
while(rs.next()){
添加(新人员(rs.getString(1)、rs.getString(2)、rs.getString(3));
}
rs.close();
圣克洛斯();
con.close();
}捕获(例外e){
}
退货清单;
}

}

谢谢,我想我知道你在说什么,我只需要执行它。遇到了一个早期的问题,我觉得很基本。你们能在问题的末尾看到更新的代码吗?@kicking莴苣你们将在AsyncTask方法中设置适配器。现在将insertString传递给AsyncTask e.q.execute(insertString),并在autocompletetextview的onPostExecute设置适配器中执行抓取和设置。您也可以有空的适配器,但我建议您创建自己的适配器子类,以获得对它的更多控制。谢谢,我确实理解与AsynTask有关的部分。只是我的初始设置。无法理解为什么为空指针。在调用
AsynTask
之前,我是否遗漏了需要设置的其他内容?@kicking莴苣请添加您的日志。我继续,并将您标记为正确;既然你回答了原来的问题。这个空指针是一个次要的东西。一点也不明白。但并不是真的相关。因为这是一个不同的主题,所以我们将把它作为单独的问题来展开,并保持这个主题的整洁。