我实现了一个每15分钟解析一次URL的计时器(Timer
任务)。
名为ParsedExampleDataSet
的对象获取该数据。
每当我尝试检索运行中的对象或String=Object.toString()
时,我都会收到空指针异常和致命错误。
我该如何检索它?我可以尝试另一种实现方式吗?
为什么getBaseContext()
无法在runnable中运行?
以下是我遇到问题的大部分代码。我还在我的问题发生时添加了两条评论。
@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 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 );
答案 0 :(得分:1)
我认为这是因为当您在Context context = this.getBaseContext()
类中执行:TimerTask()
时,您指的是一个超出类范围的变量。因为TimerTask()
不是ContextWrapper
的子类,所以它不直接获取上下文。要获取活动的上下文(希望!而不是Application
的上下文),您应该执行:Context context = ParsedExampleDataSet.this.getBaseContext();
这样您可能不应该获得任何空指针异常。