2015-02-27 5 views
0

Я пишу это приложение, которое извлекает информацию о фильме из API rottentomatoes. Я использую клиента для разбора и http-запросов.textChangedListener не выполняет asynctask

Сначала я попытался настроить поиск, но с тех пор, как я использовал framents (FragmentNavigationDrawer), это не вариант.

Следующий лучший. EditText с ListPopupWindow.

Я установил textchangelistener, так что, когда я начинаю вводить материал в заданный edittext (search), он ДОЛЖЕН выполнять asynctask (используя ввод edittext в качестве поискового запроса для запроса api). Однако ничего не происходит. Ничего. Там нет единственной строки красного текста в logcat, приложение не будет разбиваться, ничего. Поэтому я обращаюсь к вам с кодами богатых уровней в stackoverflow.

фрагмент:

public class SecondFragment extends Fragment{ 
ListPopupWindow listPopupWindow; 
EditText search; 
List<Movie> result = new ArrayList<Movie>(); 
private MovieAdapter adpt; 
MovieSearch searchTask = new MovieSearch(); 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.secondfragment, container, false); 
    search = (EditText) view.findViewById(R.id.searchBox2); 
    listPopupWindow = new ListPopupWindow(getActivity()); 
    adpt = new MovieAdapter(new ArrayList<Movie>(), getActivity()); 
    searchTask = new MovieSearch(); 

    listPopupWindow.setAdapter(adpt); 
    listPopupWindow.setAnchorView(search); 
    listPopupWindow.setWidth(300); 
    listPopupWindow.setHeight(400); 

    listPopupWindow.setModal(true); 
    search.addTextChangedListener(new TextWatcher(){ 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3){ 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3){ 

     } 

     @Override 
     public void afterTextChanged(Editable editable){ 
      searchTask.cancel(true); 


      String input = search.getText().toString(); 
      searchTask.execute(input); 

     } 
    }); 

      // Inflate the layout for this fragment 

    return inflater.inflate(R.layout.secondfragment, container, false); 

} 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void onClick(View view) { 
     // detect the view that was "clicked" 
     switch (view.getId()) { 
      case R.id.addToCollection: //just a placeholder 
      break; 
     } 
    } 

    private class MovieSearch extends AsyncTask<String, Void, List<Movie>> { 

     @Override 
     protected void onPostExecute(List<Movie> result) { 
     super.onPostExecute(result); 
     adpt.setMovieList(result); 
     adpt.notifyDataSetChanged(); 
     } 
     @Override 
     protected List<Movie> doInBackground(String... params){ 
      Log.e("Status", "Entered thread"); 
      String input = (params[0]); 
      JTomato jtomato = new JTomato("jf6cykts4sybqrex3dkjd7uq"); 
      jtomato.setPage_limit(1); 
      jtomato.searchMovie(input, result, 0); 
      if (isCancelled()) 
      { 
       //Notify your activity that you had canceled the task 
       return (null); 
      } 



      return result; 
     } 




    } 



} 
+0

Укажите «Log.e (« Статус »,« Введенная нить »); in делать в фоновом режиме вашей асинхронной проверки и проверить, входит ли она или нет. –

+1

Откуда вы знаете? Похоже, вы всегда возвращаете 'null' из' doInBackground() '. И вы не можете перезапустить такую ​​задачу. Вам нужно каждый раз создавать новый экземпляр задачи. 'MovieSearch searchTask.execute();' Кроме того, это не то, как вы хотите это делать. Попытка отменить и перезапустить задачу каждый раз, когда они набирают письмо? – codeMagic

+0

Я, должно быть, неправильно понял что-то об отмене заданий, статус должен быть изменен и впоследствии исполнен (im либо замедленный, либо усталый). Как вы думаете, я должен делать поиск? Есть ли способ начать поиск, когда нажата клавиша «enter-key» на клавиатуре? Этот поиск предназначен только для поиска фильма. После этого я добавляю другую асинхронную тему, которая получает детали из этого фильма. –

ответ

1

Вы никогда не создавать и экземпляр AsyncTask MovieSearch searchTask всегда нуль.

добавить этот код searchTask = new MovieSearch();

перед вызовом

searchTask.execute();