0

所以我有这个从网站获取数据的 AsyncTask,并在它的后期执行中调用一个 main 函数来为 main 的 textview 设置文本。

这是代码。

@Override
protected Void doInBackground(String... arg0) {     
    result = connect(start);//connect to the webpage, start is a URL
    // TODO Auto-generated method stub
    return null;
}

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);

    Document doc = Jsoup.parse(this.result);
    Elements stuff = doc.select("td");

    MainActivity.GetData(doc);//set the textview
}

我每五秒钟调用一次处理程序来执行此操作,这是处理程序代码。

hand = new Handler();       
r = new Runnable() {

    @Override
    public void run() {
            dh  = new DownloadHelper("http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over-the-last-24-hours");
            dh.execute("");// TODO Auto-generated method stub
            hand.postDelayed(this, 10000);
        }
    };

hand.post(r);

发生的情况是,当网站加载时,我的 UI 滞后很多,几乎到了冻结的程度。我不知道是什么原因造成的,我的 UI 基于 ViewPager,带有片段。

不过,我没有从片段中运行此代码,它是从我的主要活动的 onCreate 中运行的。

编辑:我编辑了我的 onPostExecute 看起来像这样

@Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub



    super.onPostExecute(result);

        Elements stuff = doc.select("td");
    String[] arr = new String[stuff.size()];
    for(int i = 0 ; i < 3 ; i ++)
    {

        arr[i] = stuff.get(79 + i).text();

    }

    MainActivity.GetData(arr);
    MainActivity.dismissLoading();
}

这是我的 GetData

public static void GetData(String[] s)
{

 edit.setText(s[0]);




}

这是连接()

public static String connect(String l)
{

    String url = l;
    HttpURLConnection connect;
    String result;
    String result2 = null;
    BufferedReader br;

    try {
        connect = (HttpURLConnection) (new URL(url)).openConnection();
        br = new BufferedReader(new InputStreamReader(connect.getInputStream()));
        while ((result = br.readLine()) != null)
        {
             result2 += result;
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block

            e.printStackTrace();
            System.out.print("ERROR");
    }
    return result2;

}
4

1 回答 1

1

对于那些真正偶然发现我的问题并想要答案的人,我在另一个项目中设法解决了它。

基本上,在

   while ((result = br.readLine()) != null)
    {
         result2 += result;
    }

循环,而不是直接将结果附加到 result2,而是将结果附加到 StringBuffer。然后在循环结束时,将 StringBuffer 添加回 result2。

于 2013-10-25T15:24:16.123 回答