0

У меня есть editText, я сделал пользовательскую операцию поиска, сделав api-вызов и получив результаты от веб-службы и List в ListView, All isworking очень хорошо, Но дело в том, что когда я вхожу в одну букву, он начинает делать «api call», так что я не могу вписать другой текст в thiat editext, когда вызов прекращается и List генерируется, после того как только я могу ввести другое письмо, Can любой приятель, пожалуйста, скажите мне, как код для него, если я хочу, чтобы напечатать письмо и simultaneusly получение результатов от вызова API, Мой код, как показано ниже: main.javaИспользовать textChangedListener с make api-вызовом без прерывания ввода текста с клавиатуры в android

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

     } 

    } 
} 

ответ

0

Попробуйте

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


      } 

     } 
    } 
+0

Я редактировал ответ –

+0

Hy Tushar я cahnged мой код, УРС, но все та же вещь happening..no изменение проблемы previus –

+0

То, что я на самом деле просто замораживают ваш editText, пока вы совершаете этот вызов. –