gpt4 book ai didi

java - 从可运行/TimerTask 中检索字符串

转载 作者:行者123 更新时间:2023-12-02 08:30:46 27 4
gpt4 key购买 nike

我已经实现了一个计时器,每 15 分钟解析一次 URL(计时器任务)。我创建的一个对象获取该数据。之后我使用它在屏幕上显示数据。

现在,每当我尝试从可运行对象中检索该 Object/a String=Object.toString() 时,我都会遇到空指针异常和 fatal error 。

我的问题是是否可以使用其他技术来做到这一点,或者对象不再存在于可运行对象之外,我们对此无能为力;如果是这种情况,任何人都可以告诉我是否有另一种方法来实现计时器/可运行?

非常感谢

这是我遇到问题的大部分代码

 @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle)
final TextView tv = new TextView(this);
TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
URL url = null;
try {
url = new URL("http://www.eurosport.fr/");
} catch (MalformedURLException e3) {

e3.printStackTrace();
}

/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp;
try {
sp = spf.newSAXParser();
} catch (ParserConfigurationException e2) {

e2.printStackTrace();
} catch (SAXException e2) {

e2.printStackTrace();
}

/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = null;
try {
sp = spf.newSAXParser();
xr = sp.getXMLReader();
} catch (SAXException e1) {

e1.printStackTrace();
} catch (ParserConfigurationException e) {

e.printStackTrace();
}
/* Create a new ContentHandler and apply it to the XML-Reader*/
ExampleHandler myExampleHandler = new ExampleHandler();
try {
sp = spf.newSAXParser();
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
xr.setContentHandler(myExampleHandler);

/* Parse the xml-data from our URL. */
try {
xr.parse(new InputSource(url.openStream()));
} catch (IOException e) {

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

e.printStackTrace();
}
/* Parsing has finished. */

/* Our ExampleHandler now provides the parsed data to us. */
ParsedExampleDataSet parsedExampleDataSet =
myExampleHandler.getParsedData();

System.out.println(parsedExampleDataSet.toString());

tv.setText(parsedExampleDataSet.toString());


Context context = this.getBaseContext();

// I also dont understand why inside the runnable getBaseContext() does not exist ???

Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),
R.raw.nature1)
context.setWallpaper(mBitmap);


}


});

} };
// I want to retrieve ParsedExampleDataSEt here in order to use it is it Possible ????



this.setContentView(tv);



long temps=1*15*1000;

t.scheduleAtFixedRate(scanTask, 300,temps );

最佳答案

潜在的丑陋方法:扩展 TimerTask 并创建一个抽象方法,例如

public abstract void onUrlRetrivalFinished(String data);

当您创建 TimerTask 对象时,您现在可以对该方法进行匿名实现,并在该方法中处理检索到的数据。

(在我看来)不太难看的方法:

制作一个界面,例如:

public interface UrlRetrivalListener {
public void onUrlRetrivalFinished(String data);
}

子类 TimerTask 并创建一个字段,例如:

private UrlRetrivalListener listener;

现在实现上述监听器接口(interface),在其中处理检索到的字符串。将监听器作为参数传递给 TimerTask,甚至让 TimerTask 有多个监听器,在检索/解析所需数据时,只需调用监听器的 onUrlRetrivalFinished() 方法即可。

这应该可以解决问题,但如果能提供更多信息就更好了。

关于java - 从可运行/TimerTask 中检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424459/

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