Android에서 ASyncTask를 사용하여 CustomAdapter를 업데이트하는 방법

아부 바 카르 시디 크

www.omdbapi.com에서 데이터를 가져오고 있습니다. 사용자 지정 ListView에 영화 이름과 함께 영화 ID를 표시하고 싶습니다. 하지만 .NET에서 AsyncTask 프로세스에 갇혀 onPostExecute()있습니다. 사용자 지정 어댑터를 업데이트 할 수 없습니다.

내 ListView 활동

public class MovieSearch extends AppCompatActivity {

ListViewAdapter listViewAdapter ;
ListView lview;
EditText moviename ;
ProgressDialog progressDialog;
String name ;

private final static String name1[] = {
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"};

private final static String id[] = {
        "Month - 1",
        "Month - 2",
        "Month - 3",
        "Month - 4",
        "Month - 5",
        "Month - 6",
        "Month - 7",
        "Month - 8",
        "Month - 9",
        "Month - 10",
        "Month - 11",
        "Month - 12"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movie_search);

    moviename = (EditText) findViewById(R.id.search_movie_name);

    lview = (ListView) findViewById(R.id.list_movie);
    //listViewAdapter = new ListViewAdapter(this, new String[]{}, new String[]{});
    lview.setAdapter(listViewAdapter);

    lview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Object movieid = listViewAdapter.getItem(position);
            //Intent intent = new Intent(MovieSearch.this, MovieDetails .class).putExtra(Intent.EXTRA_TEXT, movieid);
            //startActivity(intent);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@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 searching(View view) {
    name = moviename.getText().toString();
    new RetrieveFeedTask().execute(name);
}

public class RetrieveFeedTask extends AsyncTask<String, Void, String[]>{

    private final String LOG_TAG = RetrieveFeedTask.class.getSimpleName();

    private String[] getMovieDataFromJson(String jsonstring, int cnt) throws JSONException{

        final String SEARCH = "Search";
        final String TITLE = "Title";
        final String YEAR = "Year";
        final String POSTER = "Poster";
        final String MOVIEID = "imdbID" ;

        JSONObject jsonObject = new JSONObject(jsonstring);
        JSONArray jsonArray = jsonObject.getJSONArray(SEARCH);

        String[] resultStrs = new String[cnt];
        String[] movIdStrs = new String[cnt];
        String[] coverStrs = new String[cnt];

        for (int i = 0; i < jsonArray.length(); i++){
            String movname;
            String movyear;
            String movcover;
            String movieID;

            JSONObject titleobj = jsonArray.getJSONObject(i);
            movname = titleobj.getString(TITLE);
            movyear = titleobj.getString(YEAR);
            movcover = titleobj.getString(POSTER);
            movieID = titleobj.getString(MOVIEID);

            resultStrs[i] = movname + " [" + movyear + "]";
            movIdStrs[i] = movieID ;
            coverStrs[i] = movcover ;
            name1[i] = resultStrs[i];
            id[i] = movIdStrs[i];

        }

        for (String s : resultStrs){

            Log.v(LOG_TAG, "Movie Entry : " + s);
        }

        return resultStrs;
    }

    @Override
    protected void onPreExecute(){
        progressDialog = ProgressDialog.show(MovieSearch.this, "", "Searching for "+name+"...", true);
    }

    @Override
    protected String[] doInBackground(String... params) {

        String jsonString;

        try{
            URL url = new URL("http://www.omdbapi.com/?s="+params[0]);
            Log.v(LOG_TAG, "URL : " + url);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
                bufferedReader.close();
                progressDialog.dismiss();
                jsonString = stringBuilder.toString();
                Log.v(LOG_TAG, "JSONString : " + jsonString);
            }
            finally{
                urlConnection.disconnect();
            }
        }
        catch(Exception e) {
            Log.e("ERROR", e.getMessage(), e);
            return null;
        }

        try{
            return getMovieDataFromJson(jsonString, 10);
        }catch (JSONException e){
            Log.e(LOG_TAG, e.getMessage(), e);
            e.printStackTrace();
        }
        return new String[0];
    }

    @Override
    protected void onPostExecute(String[] res){
        if (res != null){
           // mMovie.clear();
            for (String newmovstr : res){
                //mMovieAdapter.add(newmovstr);
                listViewAdapter = new ListViewAdapter(MovieSearch.this, newmovstr, newmovstr);
            }
        }
    }
}
}

내 CustomListViewAdpter

public class ListViewAdapter extends BaseAdapter {

Activity context;
String name;
String id;

public ListViewAdapter(Activity context, String name, String id) {
    super();
    this.context = context;
    this.name = name;
    this.id = id;
}

@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

private class ViewHolder {
    TextView txtViewName;
    TextView txtViewID;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    LayoutInflater inflater =  context.getLayoutInflater();

    if (convertView == null)
    {
        convertView = inflater.inflate(R.layout.list_item_movie, null);
        holder = new ViewHolder();
        holder.txtViewName = (TextView) convertView.findViewById(R.id.list_item_movie_textview);
        holder.txtViewID = (TextView) convertView.findViewById(R.id.list_item_movieID_textview);
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtViewName.setText(name);
    holder.txtViewID.setText(id);

    return convertView;
}
}
무하마드 웨 일드

onPostExecute 메서드 변경

@Override
    protected void onPostExecute(String jsonString) {
        if (progressDialog != null) {
            progressDialog.setVisibility(View.GONE);
        }
        if (jsonString != null) {

            movieList.clear();
            getMovieDataFromJson(jsonString);
            if (listViewAdapter == null) {

                listViewAdapter = new ListViewAdapter(MovieSearch.this, movieList);
            } else {
                listViewAdapter.notifyDataSetChanged();
            }

        }
    }

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

CustomAdapter를 사용하여 GridView 내에서 ImageView 업데이트

분류에서Dev

CustomAdapter를 사용하여 ListView에서 OnItemClickListener를 설정하는 방법

분류에서Dev

Android 10에서 인앱 업데이트를 사용하여 앱을 업데이트하는 방법

분류에서Dev

AsyncTask를 사용하여 전역 변수를 업데이트하는 방법

분류에서Dev

customadapter에서 notificationdatasetchanged () 호출 후 OnStart ()에서 변수를 업데이트하는 방법

분류에서Dev

js를 사용하여 html에서 숫자를 업데이트하는 방법

분류에서Dev

Ajax를 사용하여 Rails에서 Button을 업데이트하는 방법

분류에서Dev

httpget을 사용하여 webapi에서 업데이트를 수행하는 방법

분류에서Dev

XML 비동기 작업에서 ListView와 함께 CustomAdapter를 사용하는 방법

분류에서Dev

ReactiveMongo를 사용하여 문서를 업데이트하는 방법

분류에서Dev

Horizontal ListView를 사용하여 CustomAdapter의 getView에서 위치에 따라 이미지를 얻는 방법

분류에서Dev

Android 앱에서 Excel 시트를 업데이트하는 방법

분류에서Dev

sqlalchemy를 사용하여 Pandas 데이터 세트에서 db 테이블을 업데이트하는 방법

분류에서Dev

Strapi에서 사용자를 업데이트하는 방법

분류에서Dev

Android Studio에서 AsyncTask를 사용하여 드로어 블에서 이미지를 설정하는 방법

분류에서Dev

codeigniter를 사용하여 Ajax 내에서 함수를 호출하여 업데이트하는 방법

분류에서Dev

Firestore에서 커스텀 키를 사용하여 데이터를 업데이트하는 방법

분류에서Dev

ajax를 사용하여 select2 드롭 다운에서 데이터를 업데이트하는 방법

분류에서Dev

Reactivevar를 사용하여 Meteor에서 데이터를 업데이트하는 방법

분류에서Dev

wpf에서 inotifypropertychanged 이벤트를 사용하여 다른 창에서 속성을 업데이트하는 방법

분류에서Dev

Android : LocationListener에서 업데이트를 활성화하는 방법

분류에서Dev

GLSurfaceView Android에서 UI를 업데이트하는 방법

분류에서Dev

Android의 arraylist에서 요소를 업데이트하는 방법

분류에서Dev

SharedPrefManager를 Android에서 업데이트하는 방법

분류에서Dev

REST API를 사용하여 ALM에서 테스트 케이스의 상태를 업데이트하는 방법

분류에서Dev

CustomAdapter의 Activity에서 메서드를 호출하는 방법

분류에서Dev

json을 사용하여 solr 업데이트에서 한 번에 여러 인덱스를 삽입하는 방법

분류에서Dev

iOS를 사용하여 sqlite에서 이미지를 업데이트하는 방법

분류에서Dev

PHP를 사용하여 mysql에서 itemname이 동일한 경우 qunatity를 업데이트하는 방법

Related 관련 기사

  1. 1

    CustomAdapter를 사용하여 GridView 내에서 ImageView 업데이트

  2. 2

    CustomAdapter를 사용하여 ListView에서 OnItemClickListener를 설정하는 방법

  3. 3

    Android 10에서 인앱 업데이트를 사용하여 앱을 업데이트하는 방법

  4. 4

    AsyncTask를 사용하여 전역 변수를 업데이트하는 방법

  5. 5

    customadapter에서 notificationdatasetchanged () 호출 후 OnStart ()에서 변수를 업데이트하는 방법

  6. 6

    js를 사용하여 html에서 숫자를 업데이트하는 방법

  7. 7

    Ajax를 사용하여 Rails에서 Button을 업데이트하는 방법

  8. 8

    httpget을 사용하여 webapi에서 업데이트를 수행하는 방법

  9. 9

    XML 비동기 작업에서 ListView와 함께 CustomAdapter를 사용하는 방법

  10. 10

    ReactiveMongo를 사용하여 문서를 업데이트하는 방법

  11. 11

    Horizontal ListView를 사용하여 CustomAdapter의 getView에서 위치에 따라 이미지를 얻는 방법

  12. 12

    Android 앱에서 Excel 시트를 업데이트하는 방법

  13. 13

    sqlalchemy를 사용하여 Pandas 데이터 세트에서 db 테이블을 업데이트하는 방법

  14. 14

    Strapi에서 사용자를 업데이트하는 방법

  15. 15

    Android Studio에서 AsyncTask를 사용하여 드로어 블에서 이미지를 설정하는 방법

  16. 16

    codeigniter를 사용하여 Ajax 내에서 함수를 호출하여 업데이트하는 방법

  17. 17

    Firestore에서 커스텀 키를 사용하여 데이터를 업데이트하는 방법

  18. 18

    ajax를 사용하여 select2 드롭 다운에서 데이터를 업데이트하는 방법

  19. 19

    Reactivevar를 사용하여 Meteor에서 데이터를 업데이트하는 방법

  20. 20

    wpf에서 inotifypropertychanged 이벤트를 사용하여 다른 창에서 속성을 업데이트하는 방법

  21. 21

    Android : LocationListener에서 업데이트를 활성화하는 방법

  22. 22

    GLSurfaceView Android에서 UI를 업데이트하는 방법

  23. 23

    Android의 arraylist에서 요소를 업데이트하는 방법

  24. 24

    SharedPrefManager를 Android에서 업데이트하는 방법

  25. 25

    REST API를 사용하여 ALM에서 테스트 케이스의 상태를 업데이트하는 방법

  26. 26

    CustomAdapter의 Activity에서 메서드를 호출하는 방법

  27. 27

    json을 사용하여 solr 업데이트에서 한 번에 여러 인덱스를 삽입하는 방법

  28. 28

    iOS를 사용하여 sqlite에서 이미지를 업데이트하는 방법

  29. 29

    PHP를 사용하여 mysql에서 itemname이 동일한 경우 qunatity를 업데이트하는 방법

뜨겁다태그

보관