在android中,在不中断键盘输入的情况下,将textChangedListener与makeAPI调用一起使用

在android中,在不中断键盘输入的情况下,将textChangedListener与makeAPI调用一起使用,android,api,android-asynctask,android-edittext,textchanged,Android,Api,Android Asynctask,Android Edittext,Textchanged,我有一个editText,我做了一个定制的搜索活动,通过api调用,从web服务获取结果,并将结果列表到ListView中,一切都很好,但当我输入一个字母时,它开始进行“api调用”,所以我不能在thiat editText中输入另一个文本,当呼叫停止并生成列表后,只有我才能输入另一个字母。如果我想键入字母并同时从api调用中获得结果,如何为其编码?我的代码如下: main.java public class SearchActivity extends Activity { publi

我有一个editText,我做了一个定制的搜索活动,通过api调用,从web服务获取结果,并将结果列表到ListView中,一切都很好,但当我输入一个字母时,它开始进行“api调用”,所以我不能在thiat editText中输入另一个文本,当呼叫停止并生成列表后,只有我才能输入另一个字母。如果我想键入字母并同时从api调用中获得结果,如何为其编码?我的代码如下:

main.java

public class SearchActivity extends Activity {
    public com.epe.yehki.uc.Menu searchMenu;
    public Header searchHeader;
    public EditText et_serach;
    JSONObject jsonObj;
    private ProgressDialog pDialog;
    Intent in = null;
    String searchUrl;
    int flag;
    public Header header;
    public Menu menu;
    public TextView title;
    Bitmap bitmap;;
    private ProductAdapter productContent;
    // PRODUCTS....
    // arrayLists......
    public static ArrayList<String> productArray;
    public static ArrayList<String> categoryArray;

    //

    // contacts JSONArray
    JSONArray subcategories = null;
    JSONArray products = null;
    public String catid;
    public String id;
    public String pid;
    String name;
    ListView lv;

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> subcategoryList;
    ArrayList<HashMap<String, String>> productList;

    // new
    public String proname;
    public String prodesc;
    public String proimg;

    public String proMinOrderQty;
    public String proMinPrice;
    public String proMaxPrice;
    public String proTerms;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_search);
        productList = new ArrayList<HashMap<String, String>>();
        searchMenu = (com.epe.yehki.uc.Menu) findViewById(R.id.menusearch);
        searchMenu.setSelectedTab(2);
        searchHeader = (Header) findViewById(R.id.headersearch);
        searchHeader.title.setText("Search");
        et_serach = (EditText) findViewById(R.id.et_serach);
        lv = (ListView) findViewById(R.id.serch_list);
        productContent = new ProductAdapter(SearchActivity.this, productList);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if (Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "") != null && !Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "").equals(" ")
                        && !Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "").equals("0")) {
                    in = new Intent(getApplicationContext(), ProductDetailActivity.class);
                    proname = ((TextView) view.findViewById(R.id.product_label)).getText().toString();

                    // getting ProductId from the tag...

                    pid = productList.get(position).get(Const.TAG_PRODUCT_ID);
                    proimg = productList.get(position).get(Const.TAG_PRODUCT_IMG);
                    System.out.println(":::::::::::::::;;THE INTENT FOR THE PRODUCUT DETIALS ACTIVITY=================" + pid);

                    in.putExtra(Const.TAG_PRODUCT_ID, pid);
                    in.putExtra(Const.TAG_PRODUCT_IMG, proimg);
                    in.putExtra(Const.TAG_PRODUCT_NAME, proname);

                    startActivity(in);
                } else {
                    in = new Intent(SearchActivity.this, LoginActivity.class);
                    startActivity(in);
                }
            }
        });

        et_serach.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                System.out.println(":::::::::::::::;after text changed called:::");
                productList.clear();
                new GetSearchList().execute();
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() != 0) {
                    System.out.println(":::::::::::::::;on text changed called:::");
                    // CALL SEARCH API........!!!
                    productList.clear();

                }

            }
        });
    }

    // SEARCH API()..!!!
    private class GetSearchList extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            productList.clear();
            pDialog = new ProgressDialog(SearchActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            BackendAPIService sh = new BackendAPIService();
            searchUrl = Const.API_PRODUCT + "?product_name=" + et_serach.getText().toString().trim();
            System.out.println(":::::::::::::::::::SUB URL:::::::::::::::::" + searchUrl);
            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(searchUrl, BackendAPIService.GET);

            Log.d("Response: ", "> " + jsonStr);
            try {
                if (jsonStr != null) {

                    jsonObj = new JSONObject(jsonStr);
                    if (jsonObj.getString(Const.TAG_STATUS).equals("success")) {
                        if (jsonObj.has(Const.TAG_PRODUCT_DETAIL)) {
                            System.out.println("::::::::::::::::true::::::::::::::::" + jsonObj.has(Const.TAG_PRODUCT_DETAIL));
                            products = jsonObj.getJSONArray(Const.TAG_PRODUCT_DETAIL);

                            if (products != null && products.length() != 0) {
                                // looping through All Contacts

                                for (int i = 0; i < products.length(); i++) {
                                    JSONObject c = products.getJSONObject(i);

                                    pid = c.getString(Const.TAG_PRODUCT_ID);
                                    System.out.println("::::::::::::::::::PARSING PRODUCT ID:::::::::::::" + pid);
                                    String proname = c.getString(Const.TAG_PRODUCT_NAME);
                                    String prodesc = c.getString(Const.TAG_LISTING_DESCRIPTION);
                                    String proimg = Const.API_HOST + "/" + c.getString(Const.TAG_PRODUCT_IMG);
                                    System.out.println("::::::::::::::;products Length:::::::::::" + products.length());
                                    System.out.println(":::::::::::::::My Image Url:::::::::::::" + proimg);
                                    String proMinOrderQty = c.getString(Const.TAG_PRODUCT_MIN_ORDER_QTY);
                                    c.getString(Const.TAG_PRODUCT_MIN_PRICE);
                                    c.getString(Const.TAG_PRODUCT_MAX_PRICE);

                                    c.getString(Const.TAG_PRODUCT_PAYMENT_TERMS);

                                    // for company details..!!!

                                    // new Working

                                    HashMap<String, String> product = new HashMap<String, String>();

                                    product.put(Const.TAG_PRODUCT_ID, pid);
                                    product.put(Const.TAG_PRODUCT_NAME, proname);
                                    product.put(Const.TAG_PRODUCT_IMG, proimg);
                                    product.put(Const.TAG_PRODUCT_MIN_ORDER_QTY, proMinOrderQty);
                                    product.put(Const.TAG_PRODUCT_DESCRIPTION, prodesc);
                                    productList.add(product);

                                }
                            }
                        }
                    } else {
                        runOnUiThread(new Runnable() {
                            public void run() {
                                Utils.showCustomeAlertValidation(SearchActivity.this, "No Product found", "Yehki", "Ok");
                            }
                        });
                    }

                } else {
                    Log.e("ServiceHandler", "Couldn't get any data from the url");
                }

            } catch (JSONException e) {
                e.printStackTrace();
                System.out.println("::::::::::::::::::got an error::::::::::::");
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();

            productContent.notifyDataSetChanged();
            lv.setAdapter(productContent);
        }
    }
}
公共类SearchActivity扩展活动{
public com.epe.yehki.uc.Menu searchMenu;
公共头搜索头;
公共编辑文本等;
JSONObject jsonObj;
私人对话;
意图为空;
字符串搜索URL;
int标志;
公共报头;
公共菜单;
公共文本视图标题;
位图;;
私有产品适配器产品内容;
//产品。。。。
//阵列列表。。。。。。
公共静态ArrayList productArray;
公共静态数组列表类别数组;
//
//联系JSONArray
JSONArray子类别=null;
JSONArray产品=null;
公共字符串catid;
公共字符串id;
公共字符串pid;
字符串名;
ListView lv;
//ListView的Hashmap
ArrayList子类别列表;
ArrayList产品列表;
//新的
公共字符串proname;
公共字符串prodesc;
公共字符串proimg;
公共字符串proMinOrderQty;
公共字符串proMinPrice;
公共字符串proMaxPrice;
公共字符串proTerms;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
setContentView(R.layout.activity\u search);
productList=新的ArrayList();
searchMenu=(com.epe.yehki.uc.Menu)findviewbyd(R.id.menusearch);
搜索菜单。设置所选选项卡(2);
searchHeader=(Header)findViewById(R.id.headersearch);
searchHeader.title.setText(“搜索”);
et_serach=(编辑文本)findViewById(R.id.et_serach);
lv=(ListView)findViewById(R.id.serch_列表);
productContent=新的ProductAdapter(SearchActivity.this,productList);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(Pref.getValue(SearchActivity.this,Const.Pref_CUSTOMER_ID,“”)=null&&!Pref.getValue(SearchActivity.this,Const.Pref_CUSTOMER_ID,“”)。等于(“”)
&&!Pref.getValue(SearchActivity.this,Const.Pref_CUSTOMER_ID,“”)。等于(“0”){
in=新意图(getApplicationContext(),ProductDetailActivity.class);
proname=((TextView)view.findViewById(R.id.product_label)).getText().toString();
//正在从标记获取ProductId。。。
pid=productList.get(位置).get(常量标记\u产品\u ID);
proimg=productList.get(position).get(Const.TAG\u PRODUCT\u IMG);
System.out.println(“:::::;;产品详细信息活动的意图===================================”+pid);
in.putExtra(Const.TAG_PRODUCT_ID,pid);
in.putExtra(Const.TAG\u PRODUCT\u IMG,proimg);
in.putExtra(Const.TAG_PRODUCT_NAME,proname);
星触觉(in);
}否则{
in=新意图(SearchActivity.this、LoginActivity.class);
星触觉(in);
}
}
});
et_serach.addTextChangedListener(新的TextWatcher(){
公共无效后文本已更改(可编辑){
System.out.println(“::::::;文本更改后调用::”;
productList.clear();
新建GetSearchList().execute();
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
public void onTextChanged(字符序列、int start、int before、int count){
如果(s.长度()!=0){
System.out.println(“::::::;on文本更改调用::”;
//调用搜索API。。。。。。。。!!!
productList.clear();
}
}
});
}
//搜索API()。。!!!
私有类GetSearchList扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
productList.clear();
pDialog=newprogressdialog(SearchActivity.this);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//创建服务处理程序类实例
BackendAPIService sh=新的BackendAPIService();
searchUrl=Const.API_PRODUCT+“?PRODUCT_name=“+et_serach.getText().toString().trim();
System.out.println(::::::子URL:::::::::::“+searchUrl);
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(searchUrl,BackendAPIService.GET);
Log.d(“响应:”、“>”+jsonStr);
试一试{
if(jsonStr!=null){
jsonObj=新的JSONObject(jsonStr);
if(jsonObj.getString(Const.TAG_STATUS).equals(“success”)){
if(jsonObj.has(常数标签产品细节)){
System.out.println(“”:t
       public class SearchActivity extends Activity {
        public com.epe.yehki.uc.Menu searchMenu;
        public Header searchHeader;
        public EditText et_serach;
        JSONObject jsonObj;
        private ProgressDialog pDialog;
        Intent in = null;
        String searchUrl;
        int flag;
        public Header header;
        public Menu menu;
        public TextView title;
        Bitmap bitmap;;
        private ProductAdapter productContent;
        // PRODUCTS....
        // arrayLists......
        public static ArrayList<String> productArray;
        public static ArrayList<String> categoryArray;

        //

        // contacts JSONArray
        JSONArray subcategories = null;
        JSONArray products = null;
        public String catid;
        public String id;
        public String pid;
        String name;
        ListView lv;

        // Hashmap for ListView
        ArrayList<HashMap<String, String>> subcategoryList;
        ArrayList<HashMap<String, String>> productList;

        // new
        public String proname;
        public String prodesc;
        public String proimg;

        public String proMinOrderQty;
        public String proMinPrice;
        public String proMaxPrice;
        public String proTerms;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_search);
            productList = new ArrayList<HashMap<String, String>>();
            searchMenu = (com.epe.yehki.uc.Menu) findViewById(R.id.menusearch);
            searchMenu.setSelectedTab(2);
            searchHeader = (Header) findViewById(R.id.headersearch);
            searchHeader.title.setText("Search");
            et_serach = (EditText) findViewById(R.id.et_serach);
            lv = (ListView) findViewById(R.id.serch_list);
            productContent = new ProductAdapter(SearchActivity.this, productList);
            lv.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    if (Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "") != null && !Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "").equals(" ")
                            && !Pref.getValue(SearchActivity.this, Const.PREF_CUSTOMER_ID, "").equals("0")) {
                        in = new Intent(getApplicationContext(), ProductDetailActivity.class);
                        proname = ((TextView) view.findViewById(R.id.product_label)).getText().toString();

                        // getting ProductId from the tag...

                        pid = productList.get(position).get(Const.TAG_PRODUCT_ID);
                        proimg = productList.get(position).get(Const.TAG_PRODUCT_IMG);
                        System.out.println(":::::::::::::::;;THE INTENT FOR THE PRODUCUT DETIALS ACTIVITY=================" + pid);

                        in.putExtra(Const.TAG_PRODUCT_ID, pid);
                        in.putExtra(Const.TAG_PRODUCT_IMG, proimg);
                        in.putExtra(Const.TAG_PRODUCT_NAME, proname);

                        startActivity(in);
                    } else {
                        in = new Intent(SearchActivity.this, LoginActivity.class);
                        startActivity(in);
                    }
                }
            });

            et_serach.addTextChangedListener(new TextWatcher() {

                public void afterTextChanged(Editable s) {
                    System.out.println(":::::::::::::::;after text changed called:::");
                    productList.clear();
                    new GetSearchList().execute();
                }

                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }

                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if (s.length() != 0) {
                        System.out.println(":::::::::::::::;on text changed called:::");
                        // CALL SEARCH API........!!!
                        productList.clear();

                    }

                }
            });
        }

        // SEARCH API()..!!!
        private class GetSearchList extends AsyncTask<Void, Void, Void> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Showing progress dialog
                productList.clear();
                pDialog = new ProgressDialog(SearchActivity.this);
                pDialog.setMessage("Please wait...");
                pDialog.setCancelable(false);
                pDialog.show();
                        et_serach.setEnabled(false);

            }

            @Override
            protected Void doInBackground(Void... arg0) {
                // Creating service handler class instance
                BackendAPIService sh = new BackendAPIService();
                searchUrl = Const.API_PRODUCT + "?product_name=" + et_serach.getText().toString().trim();
                System.out.println(":::::::::::::::::::SUB URL:::::::::::::::::" + searchUrl);
                // Making a request to url and getting response
                String jsonStr = sh.makeServiceCall(searchUrl, BackendAPIService.GET);

                Log.d("Response: ", "> " + jsonStr);
                try {
                    if (jsonStr != null) {

                        jsonObj = new JSONObject(jsonStr);
                        if (jsonObj.getString(Const.TAG_STATUS).equals("success")) {
                            if (jsonObj.has(Const.TAG_PRODUCT_DETAIL)) {
                                System.out.println("::::::::::::::::true::::::::::::::::" + jsonObj.has(Const.TAG_PRODUCT_DETAIL));
                                products = jsonObj.getJSONArray(Const.TAG_PRODUCT_DETAIL);

                                if (products != null && products.length() != 0) {
                                    // looping through All Contacts

                                    for (int i = 0; i < products.length(); i++) {
                                        JSONObject c = products.getJSONObject(i);

                                        pid = c.getString(Const.TAG_PRODUCT_ID);
                                        System.out.println("::::::::::::::::::PARSING PRODUCT ID:::::::::::::" + pid);
                                        String proname = c.getString(Const.TAG_PRODUCT_NAME);
                                        String prodesc = c.getString(Const.TAG_LISTING_DESCRIPTION);
                                        String proimg = Const.API_HOST + "/" + c.getString(Const.TAG_PRODUCT_IMG);
                                        System.out.println("::::::::::::::;products Length:::::::::::" + products.length());
                                        System.out.println(":::::::::::::::My Image Url:::::::::::::" + proimg);
                                        String proMinOrderQty = c.getString(Const.TAG_PRODUCT_MIN_ORDER_QTY);
                                        c.getString(Const.TAG_PRODUCT_MIN_PRICE);
                                        c.getString(Const.TAG_PRODUCT_MAX_PRICE);

                                        c.getString(Const.TAG_PRODUCT_PAYMENT_TERMS);

                                        // for company details..!!!

                                        // new Working

                                        HashMap<String, String> product = new HashMap<String, String>();

                                        product.put(Const.TAG_PRODUCT_ID, pid);
                                        product.put(Const.TAG_PRODUCT_NAME, proname);
                                        product.put(Const.TAG_PRODUCT_IMG, proimg);
                                        product.put(Const.TAG_PRODUCT_MIN_ORDER_QTY, proMinOrderQty);
                                        product.put(Const.TAG_PRODUCT_DESCRIPTION, prodesc);
                                        productList.add(product);

                                    }
                                }
                            }
                        } else {
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    Utils.showCustomeAlertValidation(SearchActivity.this, "No Product found", "Yehki", "Ok");
                                }
                            });
                        }

                    } else {
                        Log.e("ServiceHandler", "Couldn't get any data from the url");
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                    System.out.println("::::::::::::::::::got an error::::::::::::");
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                // Dismiss the progress dialog
                if (pDialog.isShowing())
                    pDialog.dismiss();

                productContent.notifyDataSetChanged();
                lv.setAdapter(productContent);
                        et_serach.setEnabled(true);


            }

        }
    }