setText到AsyncTask中的TextView

时间:2014-01-07 18:48:35

标签: android android-asynctask textview

我只想在获取给定url的内容后将setText设置为文本TextView我做错了什么?

我已经创建了一个类,它应该只是将setText设置为定义的textview,但是在某个地方似乎存在问题,因为我在运行应用程序时只获得了空白textView。异步任务的代码:

private class RetriveSiteData extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... urls) {
        String pom = "";

        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    pom += s + "\n";
                    //publishProgress(pom);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return pom;
    }

    @Override
    protected void onPostExecute(String s) {
        text.setText(s);
    }

    protected void onProggresUpdate(String s) {
        text.setText(s);
    }

}

,主类定义如下:

public class Today extends Fragment {

TextView text;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View today = inflater.inflate(R.layout.today, container, false);
    text = (TextView) today.findViewById(R.id.textView);
    // ((TextView) today.findViewById(R.id.textView)).setText("Today");

    new RetriveSiteData().execute("http://menza.lupajz.eu/?den=dnes");

    return today;
}

on progressUpdate只是一个测试:/不知道出了什么问题。

解决了!忘了更新清单!

3 个答案:

答案 0 :(得分:0)

您必须将textView作为参数放在asyncTask构造函数上。

new RetrieveSiteData(mTextView);

然后您可以根据需要设置setText,但只能在onPostExecute方法中使用。

答案 1 :(得分:0)

onProgressUpdate()似乎是错误的参数 您应该传递Array作为该方法的参数。 尝试替换:

@Override
    protected void onProggresUpdate(String s) {
        text.setText(s);
    }

要:

@Override
    protected void onProggresUpdate(String... progress) {
        text.setText(progress[0]);
    }

如果您不想发布进度。试试extends AsyncTask<String, Void, String> 并删除您的onProgressUpdate()方法。

答案 2 :(得分:0)

AsyncTask

内开始onAttach
@Override
public void onAttach(Activity activity) {
   super.onAttach(activity);
   new RetriveSiteData().execute("http://menza.lupajz.eu/?den=dnes");
}

onPostExecute可能在实际显示视图之前被调用,因此尝试在onAttach中启动异步任务并检查。