업데이트 어댑터에 runOnUiThread를 사용하는 방법

축구는 내 인생이야

다음 코드에서 어댑터 업데이트를 시도합니다. 코드가 제대로 되었으나 모바일은 홍 모드로 전환됩니다. 데이터가 표시됩니다.

(MainActivity.this).runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     for(News news : SharedVar.getCurrentNews()){
                            _adapter.notifyDataSetChanged();
                            int currentIndex=news.getIndex();
                            Log.d("SRC_IMAGE_ADDRESS", news.getImageNewsAddress());
                            News replaceNews=new News();
                            News oldNews =_adapter.getItem(currentIndex);
                            replaceNews.setTitle(oldNews.getTitle()+" ( "+String.valueOf(currentIndex)+" )");
                            replaceNews.setImageNews(Helpers.GetImageFromUrl(news.getImageNewsAddress()));
                            SharedVar.getCurrentNews().set(currentIndex, replaceNews);
                            _adapter.notifyDataSetChanged();
                        }

                }
            });

업데이트 :

다음 코드와 같이 코드를 변경했습니다. 홍 모드가 여전히 해결되지 않는데 어떻게 해결하나요?

(MainActivity.this).runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     for(News news : SharedVar.getCurrentNews()){

                            int currentIndex=news.getIndex();
                            Log.d("SRC_IMAGE_ADDRESS", news.getImageNewsAddress());
                            News replaceNews=new News();
                            News oldNews =_adapter.getItem(currentIndex);
                            replaceNews.setTitle(oldNews.getTitle()+" ( "+String.valueOf(currentIndex)+" )");
                            replaceNews.setImageNews(Helpers.GetImageFromUrl(news.getImageNewsAddress()));
                            SharedVar.getCurrentNews().set(currentIndex, replaceNews);

                        }
                            _adapter.notifyDataSetChanged();

                }
            });

업데이트 2 :

public static Bitmap GetImageFromUrl(String url) {
    URL urlForImage;
    Bitmap imageNews=null;
    try {
        urlForImage = new URL(url);
        URLConnection conn = urlForImage.openConnection();
        imageNews= BitmapFactory.decodeStream(conn.getInputStream());

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return imageNews;
}

업데이트 3 :

다시 : 다음 코드와 같이 코드를 변경했습니다. 홍 모드는 아직 해결되지 않았습니다.

public class AsyncTaskReadImageNews extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... arg0) {
            (MainActivity.this).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                       for(News news : SharedVar.getCurrentNews()){
                            int currentIndex=news.getIndex();
                            Log.d("INDEX_ITEM", String.valueOf(currentIndex));
                            News replaceNews=new News();
                            News oldNews =_adapter.getItem(currentIndex);
                            replaceNews.setTitle(oldNews.getTitle()+" ( "+String.valueOf(currentIndex)+"  )");
                            replaceNews.setImageNews(Helpers.GetImageFromUrl(news.getImageNewsAddress()));
                            SharedVar.getCurrentNews().set(currentIndex, replaceNews);
                        }
                }
            });
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            _adapter.notifyDataSetChanged();
        }
    }
    }

이것은 내 코드입니다.

  public class MainActivity extends Activity  {
    NewsAdapter _adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    @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.
        boolean result=true;
        int id = item.getItemId();
        switch (id) {
        case R.id.action_transfer_news:
            SharedVar.setCurrentTask(Taskes.GET_TRANSFER_NEWS);
        new JsoupCommands().ConnectToWebsite(MainActivity.this);
            break;
        case R.id.action_settings:

            break;
        default:
            result=super.onOptionsItemSelected(item);
            break;
        }
        return result;
    }

    public class JsoupCommands {
        private  Dialog _dialog;
        private RatingBar _loadingStar;
        public void ConnectToWebsite(Context context) {
            _dialog = new Dialog(context);
            _dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            _dialog.setContentView(R.layout.loading_layout);
            _loadingStar=(RatingBar) _dialog.findViewById(R.id.loading_RatingBar);
            Helpers.ConfigRatingLoader(_loadingStar);
            new AsyncTaskJsoup().execute();
        }

    public class AsyncTaskJsoup extends AsyncTask<Void, Void, String>{
            boolean _startThread;
            Element _NewsRegion;
            Elements _links;
            List<News> _LisOfNews;
            int _step=0;
            @Override
            protected String doInBackground(Void... listviews) {
                String result=null;
                Document doc;
                    try {
                        threadLoading.start();
                        SharedVar.clearNews();
                        doc = Jsoup.connect(Helpers.getCurrentTaskLink()).get();
                        _NewsRegion = doc.getElementById("content-post");
                        _links = _NewsRegion.select("article div[class=arch_body]");
                        _LisOfNews = new ArrayList<News>();
                        for (Element element : _links) {
                            Element textNewsElement = element.select("div[class=arch_content] a").first();
                            Element imageNewsElement = element.select("div[class=arch_img] a img").first();
                            String imageSrcNews = imageNewsElement.attr("src").trim().replace("../../../..", Helpers.GetCurrentSite());
                            String titleNews = textNewsElement.text().trim();
                            String linkNews = textNewsElement.attr("href").trim().replace("../../..", Helpers.GetCurrentSite()+"/persian");
                            String dateNews=textNewsElement.nextSibling().toString().trim();
                            News news = new News();
                            news.setIndex(_LisOfNews.size());
                            news.setTitle(titleNews);
                            news.setLink(linkNews);
                            news.setDate(dateNews);
                            news.setImageNewsAddress(imageSrcNews);
                            _LisOfNews.add(news);
                        }
                        SharedVar.setCurrentNews(_LisOfNews);
                        result="Success";
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                return result;
            }
            Thread threadLoading = new Thread()
            {
                @Override
                public void run() {
                    try {
                        while(_startThread) {

                            Helpers.SetRatingLoad(_loadingStar, _step);
                            if(_step++==3){
                                _step=0;
                            }
                            Log.d("DELAY", String.valueOf(_step));
                            sleep(200);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            @Override
            protected void onPostExecute(String result) {
                _startThread=false;
                _dialog.dismiss();
                FillNewsinListView();
                new AsyncTaskReadImageNews().execute(); 
            }
            private void FillNewsinListView() {
                List<News> news=SharedVar.getCurrentNews();
                if(news!=null&&news.size()>0){
                    Log.d("FILL_NEWS", "YES");
                    _adapter = new NewsAdapter(MainActivity.this, R.layout.rows_news, SharedVar.getCurrentNews());
                    ((ListView)findViewById(R.id.news_listView)).setAdapter(_adapter);
                }else{
                    Log.d("FILL_NEWS", "NO");
                }
            }
            @Override
            protected void onPreExecute() {
                _startThread=true;
                _dialog.show();
            }
        }

    public class AsyncTaskReadImageNews extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... arg0) {
            (MainActivity.this).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                       for(News news : SharedVar.getCurrentNews()){
                            int currentIndex=news.getIndex();
                            Log.d("INDEX_ITEM", String.valueOf(currentIndex));
                            News replaceNews=new News();
                            News oldNews =_adapter.getItem(currentIndex);
                            replaceNews.setTitle(oldNews.getTitle()+" ( "+String.valueOf(currentIndex)+" )");
                            replaceNews.setImageNews(Helpers.GetImageFromUrl(news.getImageNewsAddress()));
                            SharedVar.getCurrentNews().set(currentIndex, replaceNews);
                        }
                }
            });
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            _adapter.notifyDataSetChanged();
        }
    }
    }
}
Shivam Verma

UI 스레드에서 이미지 다운로드를 수행하기 때문에 앱이 중단됩니다. UI 스레드에서 이미지 다운로드를 수행해야합니다.

내가 좋을 것 것은을 만드는 것입니다 AsyncTask, 처리 내부의 모든 추가 doInBackground()방법과 _adapter.notifyDataSetChanged()내부 onPostExecute()이것이 당신이 UI 스레드에서 호출 할 필요가있는 유일한 것은이 때문이다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 어댑터에서 작업 등 어댑터를 호출하는 방법

분류에서Dev

활동에서 어댑터의 텍스트보기를 업데이트하는 방법

분류에서Dev

NGRX; 어댑터 데이터에 필터를 적용하는 방법

분류에서Dev

데이터 세트 / 데이터 어댑터를 사용하여 SQL Server 데이터베이스에서 데이터를 읽는 방법은 무엇입니까?

분류에서Dev

어댑터를 사용하여 AutoCompleteTextView에서 데이터를 직접 삭제하는 방법

분류에서Dev

Tibco 데이터베이스에 어댑터를 설치하는 방법

분류에서Dev

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

분류에서Dev

Mongoose를 사용하여 데이터를 mongodb로 업데이트하는 방법

분류에서Dev

사용자 지정 어댑터를 사용할 때 Android의 ListView에서 데이터를 가져 오는 방법

분류에서Dev

Android 어댑터에서 Json 데이터를 전달하는 방법

분류에서Dev

ESB ALL.Exceptions 송신 포트를 업데이트하여 WCF.SQL 어댑터를 사용하는 방법이 있습니까?

분류에서Dev

앱간에 어댑터를 재사용하는 방법

분류에서Dev

사용자 지정 목록보기 어댑터에서 데이터를 가져와 인 텐트에 추가하는 방법은 무엇입니까?

분류에서Dev

Xamarin Android에서 RunOnUIThread ()를 사용하는 방법

분류에서Dev

우분투 18.4.4에서 디스플레이 링크 어댑터를 사용하는 방법

분류에서Dev

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

분류에서Dev

linq를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

분류에서Dev

PHP를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

분류에서Dev

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

분류에서Dev

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

분류에서Dev

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

분류에서Dev

패킷이 방화벽에서 tun + 어댑터를 통과하는 방법

분류에서Dev

Laravel 5.8에서 데이터를 업데이트하는 방법

분류에서Dev

dataGridview에서만 데이터를 업데이트하는 방법

분류에서Dev

Windows 업데이트에 외장 드라이브를 사용하는 방법

분류에서Dev

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

분류에서Dev

Meteor 앱에서 Bootstrap을 업데이트하고 LESS를 사용하는 방법

분류에서Dev

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

분류에서Dev

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

Related 관련 기사

  1. 1

    다른 어댑터에서 작업 등 어댑터를 호출하는 방법

  2. 2

    활동에서 어댑터의 텍스트보기를 업데이트하는 방법

  3. 3

    NGRX; 어댑터 데이터에 필터를 적용하는 방법

  4. 4

    데이터 세트 / 데이터 어댑터를 사용하여 SQL Server 데이터베이스에서 데이터를 읽는 방법은 무엇입니까?

  5. 5

    어댑터를 사용하여 AutoCompleteTextView에서 데이터를 직접 삭제하는 방법

  6. 6

    Tibco 데이터베이스에 어댑터를 설치하는 방법

  7. 7

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

  8. 8

    Mongoose를 사용하여 데이터를 mongodb로 업데이트하는 방법

  9. 9

    사용자 지정 어댑터를 사용할 때 Android의 ListView에서 데이터를 가져 오는 방법

  10. 10

    Android 어댑터에서 Json 데이터를 전달하는 방법

  11. 11

    ESB ALL.Exceptions 송신 포트를 업데이트하여 WCF.SQL 어댑터를 사용하는 방법이 있습니까?

  12. 12

    앱간에 어댑터를 재사용하는 방법

  13. 13

    사용자 지정 목록보기 어댑터에서 데이터를 가져와 인 텐트에 추가하는 방법은 무엇입니까?

  14. 14

    Xamarin Android에서 RunOnUIThread ()를 사용하는 방법

  15. 15

    우분투 18.4.4에서 디스플레이 링크 어댑터를 사용하는 방법

  16. 16

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

  17. 17

    linq를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

  18. 18

    PHP를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

    패킷이 방화벽에서 tun + 어댑터를 통과하는 방법

  23. 23

    Laravel 5.8에서 데이터를 업데이트하는 방법

  24. 24

    dataGridview에서만 데이터를 업데이트하는 방법

  25. 25

    Windows 업데이트에 외장 드라이브를 사용하는 방법

  26. 26

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

  27. 27

    Meteor 앱에서 Bootstrap을 업데이트하고 LESS를 사용하는 방법

  28. 28

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

  29. 29

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

뜨겁다태그

보관