【问题标题】:Why is Jsoup.connect().get() not working inside thread in my Android app?为什么 Jsoup.connect().get() 在我的 Android 应用程序的线程内不起作用?
【发布时间】:2021-02-11 20:21:58
【问题描述】:

单击按钮后,我正在我的 android 应用程序中使用 Jsoup 执行网络抓取。为此,我创建了自己的线程。问题是 Jsoup.connect().get() 之后的行没有被执行。我无法弄清楚这背后的原因。这是我的代码:-

but1.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Log.e("Check","Inside button click!!");
            //obj=new Helper(et1.getText().toString(),counter);
            counter++;
            //new abc().execute(et1.getText().toString());
            
            Thread t0=new Thread(new Runnable() {
                
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    try{k=0;
                    Log.e("check","inside thread 0");
                         for(i=1;i<=5;i++){  
                             Log.e("check", "inside loop");
                                String url1="some url";
                                url1=url1+et1.getText().toString();
                                url1=url1+"xyz";
                                Log.e("Check", "Scanned url");
                                org.jsoup.nodes.Document rec=Jsoup.connect(url1).get();
                                //Thread.sleep(5000);
                                Log.e("check", "After jsoup");
                                Elements names=rec.getElementsByTag("img");
                                    for(;k<names.size();k++){
                                    Test.arr[0][k]=names.get(k).attr("alt");
                                    
                                }
                                               
                                   
                               }
                    }catch(Exception E){}
                }
            });
            t0.start();
            
            
            et3.setText(arr[0][3]);
        }
        
    });

【问题讨论】:

    标签: android multithreading jsoup


    【解决方案1】:

    您不应该直接在活动或片段或 Android 上使用 Thread 类,而是使用 AsyncTaskHanlder

    AsyncTask 示例:

    button.setOnClickListener(new View.OnClickListener() 
    {
       @Override
       public void onClick(View arg0) 
       {
           YourTask task = new YourTask();
           task.execute();
       }
    });
    

    基本上你的问题是你没有从你初始化的线程回发数据到主线程。

    【讨论】:

    • 感谢您的回复..但这会在一定程度上限制多线程的级别,因为 Android 已将其限制为 5,尽管当我使用 AsyncTask 时它工作正常.. 但我想知道什么究竟是阻止它在这里执行?
    • 为什么你需要更多来下载一些 json?代码正在执行,但您无法获取数据,因为它位于另一个线程中。
    • 其实这只是我必须实现的一小部分。如果我没有很好地控制多线程的程度,那么完整执行将需要很多时间。无论如何,还有一个疑问,假设我不想更新 UI 线程中的任何内容,而是将响应存储到我目前正在执行的数组中,我也应该为此目的使用处理程序吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多