gpt4 book ai didi

java - 在 onPreExecute() 内部调用时 TextView.setText() 的 NullPointerExcepction

转载 作者:太空狗 更新时间:2023-10-29 15:53:21 27 4
gpt4 key购买 nike

d.android.com for onPreExecute() 中说明它在 doInBackground(Params...) 之前在 UI 线程上运行,因此它应该可以轻松访问 TextView 并执行 setText() 方法Activity 从中 executed()

但在下面的代码中,loading TextView 是在扩展 Activity 的类 SplashScreen 中私有(private)声明的.在 onCreate() 中,它与 UI 的 TextView 小部件链接。但是当 AsyncTask 扩展类 Atom 时,函数 onPreExecute() 被执行,它为语句 抛出一个 NullPointerExcepction >loading.setText("Loading..."); 在里面执行。

这里是代码

public class SplashScreen extends Activity implements AnimationListener{
...
TextView loading=null;
...

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);


try {
a = (Atom) new Atom().execute(null,null,null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
finish();

}
...

loading = (TextView) findViewById(R.id.textView2);

....

}

public class Atom extends AsyncTask<RSSFeed, Void, RSSFeed>{

private RSSReader reader;
private RSSFeed feed = null;
private String uri = "http://website.com/feed/";

@Override
protected void onPreExecute() {

super.onPreExecute();
//------------problem----area-------------------
loading.setText("Loading...");
//------------problem----area-------------------


}

@Override
protected RSSFeed doInBackground(RSSFeed... arg0) {


reader = new RSSReader();

try {
feed = reader.load(uri);
Log.d("rss", feed.getTitle());



} catch (RSSReaderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return feed;
}



@Override
protected void onPostExecute(RSSFeed result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
prg.cancel();

t(result.getTitle().toString());

}


}
}

堆栈:

03-09 10:50:12.793: W/System.err(14214): java.lang.NullPointerException
03-09 10:50:12.813: W/System.err(14214): at in.edu.ss.er.splash.SplashScreen$Atom.onPreExecute(SplashScreen.java:158)
03-09 10:50:12.827: W/System.err(14214): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
03-09 10:50:12.833: W/System.err(14214): at android.os.AsyncTask.execute(AsyncTask.java:534)
03-09 10:50:12.833: W/System.err(14214): at in.edu.ss.er.splash.SplashScreen.onCreate(SplashScreen.java:45)

最佳答案

尝试在执行asyntask 之前初始化TextView。喜欢关注。

try {
loading = (TextView) findViewById(R.id.textView2);
a = (Atom) new Atom().execute(null,null,null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
finish();

}

我不知道这是否正确,这是我的猜测,所以,请让我知道发生了什么。

谢谢

关于java - 在 onPreExecute() 内部调用时 TextView.setText() 的 NullPointerExcepction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22979622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com