私のコードでは、ブロードキャスト メッセージを受信したときに timerTask を開始しています。ここでは、2 つのクラスのコードを表示しました。1.放送受信機。2. XML 解析。
私の質問は、スケジュールされた時間に timerTask を呼び出すときです タイマー呼び出し & すべてのデータをxmlクラスに取得します.「 mServiceList」のように.しかし、nullになるたびにこの配列を使用したい場合
どこが間違っているのかわかりません。
いずれかの体にアイデアがあれば、それは素晴らしいことです。
public class MyWidgetIntentReceiver extends BroadcastReceiver {
public static int clickCount = 0;
private String msg[] = null;
private ParsingXML myXMLHandler;
private ArrayList<Stream> mServiceList = new ArrayList<Stream>();
private UrlTimerTask mUrlTimerTask = null;
private Timer mTimer = null;
private String rssFeed = "https;??.....";
@Override
public void onReceive(Context context, Intent intent) {
mUrlTimerTask = new UrlTimerTask();
mTimer = new Timer();
mTimer.scheduleAtFixedRate(mUrlTimerTask, 0, 120000); // (60*2*1000)
if (intent.getAction().equals(WidgetUtils.WIDGET_UPDATE_ACTION1)) {
Toast.makeText(context, "NEXT!!", Toast.LENGTH_SHORT).show();
updatePreviousWidgetListener(context);
}
}
private void updatePreviousWidgetListener(Context context) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
// updating view
remoteViews.setTextViewText(R.id.title, getNextTitle(context));
remoteViews.setTextViewText(R.id.desc, getDesc(context));
// re-registering for click listener
remoteViews.setOnClickPendingIntent(R.id.sync_button,
MyWidgetProvider.buildButtonPendingIntent(context));
// re-registering for click listener
remoteViews.setOnClickPendingIntent(R.id.next,
MyWidgetProvider.buildNextButtonPendingIntent(context));
MyWidgetProvider.pushWidgetUpdate(context.getApplicationContext(),
remoteViews);
}
private String getDesc(Context context) {
// some static jokes from xml
msg = context.getResources().getStringArray(R.array.news_headlines);
if (clickCount >= msg.length) {
clickCount = 0;
}
return msg[clickCount];
}
private String getNextTitle(Context context) {
if (mServiceList != null && mServiceList.size() > 0) {
return mServiceList.get(clickCount).getTitle().toString();
} else {
mStreamList = myXMLHandler.getItemsList();
Toast.makeText(context, "no data found", Toast.LENGTH_SHORT).show();
return "no data";
}
}
private class UrlTimerTask extends TimerTask {
@Override
public void run() {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
myXMLHandler = new ParsingXML();
xr.setContentHandler(myXMLHandler);
URL _url = new URL(rssFeed);
xr.parse(new InputSource(_url.openStream()));
mServiceList = myXMLHandler.getItemsList();
if (!mServiceList.isEmpty()) {
for (int i = 0; i < mServiceList.size(); i++) {
Log.d(TAG, mServiceList.get(i).getTitle());
}
}
} catch (ParserConfigurationException pce) {
Log.e("SAX XML", "sax parse error", pce);
} catch (SAXException se) {
Log.e("SAX XML", "sax error", se);
} catch (IOException e) {
e.printStackTrace();
}
}
}
それでも、私の質問を理解するために何か質問があります。私の質問を理解するために最善を尽くします。答えが欲しいからです。
短いメモ: 解析データをブロードキャスト レシーバー クラスに使用したいと考えています。
ありがとう、