Я пишу это приложение, которое извлекает информацию о фильме из 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;
}
}
}
Укажите «Log.e (« Статус »,« Введенная нить »); in делать в фоновом режиме вашей асинхронной проверки и проверить, входит ли она или нет. –
Откуда вы знаете? Похоже, вы всегда возвращаете 'null' из' doInBackground() '. И вы не можете перезапустить такую задачу. Вам нужно каждый раз создавать новый экземпляр задачи. 'MovieSearch searchTask.execute();' Кроме того, это не то, как вы хотите это делать. Попытка отменить и перезапустить задачу каждый раз, когда они набирают письмо? – codeMagic
Я, должно быть, неправильно понял что-то об отмене заданий, статус должен быть изменен и впоследствии исполнен (im либо замедленный, либо усталый). Как вы думаете, я должен делать поиск? Есть ли способ начать поиск, когда нажата клавиша «enter-key» на клавиатуре? Этот поиск предназначен только для поиска фильма. После этого я добавляю другую асинхронную тему, которая получает детали из этого фильма. –