我只想在获取给定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只是一个测试:/不知道出了什么问题。
解决了!忘了更新清单!
答案 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中启动异步任务并检查。