来自Json查询的数据未在Android文本视图中填充

时间:2017-06-19 23:09:23

标签: android jsoup

我在Android中使用Json 1.9.2库来解析网站中的数据,然后将结果数据设置为Android中的TextView。但是我无法在TextView上设置获取的数据。

分享相关代码。我正在使用碎片。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    tv1 = (EditText) getActivity().findViewById(R.id.trending_textView);

    new Title().execute();


}

private class Title extends AsyncTask<Void, Void, Void> {
    String title;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Fetching the latest trends");
        mProgressDialog.setMessage("#Trends");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    public Void doInBackground(Void... params) {
        try {

            doc = Jsoup.connect(url).get();

            Elements links = doc.getElementsByTag("a");

            for (Element link : links) {
                //String linkHref = link.attr("href");
                linkText = link.text();

                //System.out.println("#"+linkText);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void onPostExecute(Void result) {

        tv1.setText(linkText.toString());
        mProgressDialog.dismiss();

    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您必须通过在doInbackground()方法中返回结果将任务结果发布到UI线程中 并且你将在onPostExecute()中接收结果作为参数,然后你从那里填充视图,因为onPostExecute()在UI线程中运行 欲了解更多信息: -

https://developer.android.com/reference/android/os/AsyncTask.html

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    tv1 = (EditText) getActivity().findViewById(R.id.trending_textView);

    new Title().execute();


}

private class Title extends AsyncTask<Void, Void, Elements> {
    String title;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Fetching the latest trends");
        mProgressDialog.setMessage("#Trends");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    public Elements doInBackground(Void... params) {
       Elements links ; 
        try {

            doc = Jsoup.connect(url).get();

             links = doc.getElementsByTag("a");

            } catch (Exeption e ) {

                return null ;
        }


        return links;
    }

    @Override
    public void onPostExecute(Elements ...links) {

           if(links.get(0) == null) return ;
           for (Element link : links.get(0)) {
            //String linkHref = link.attr("href");
            linkText = link.text();
            // u might add scrolling behavior 
            tv.append(linktext + "\n");
            //System.out.println("#"+linkText);
        }


    }
}