0

私のコードでは、ブロードキャスト メッセージを受信したときに 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();
        }

    }
}

それでも、私の質問を理解するために何か質問があります。私の質問を理解するために最善を尽くします。答えが欲しいからです。

短いメモ: 解析データをブロードキャスト レシーバー クラスに使用したいと考えています。

ありがとう、

4

1 に答える 1

0

あなたの BroadcastReceiver で、このメソッドonReceive(Context context, Intent intent)を呼び出したことがわかりませんでした。updatePreviousWidgetListener(context);ただし、コードの残りの部分には、このメソッドへの呼び出しは示されていません。

私が間違っていなければ、 で間違ったメソッドを呼び出していますonReceive(Context context, Intent intent)。いつupdatePreviousWidgetListener(context);呼ばれますか?

私が間違っている場合は修正してください。

于 2013-11-07T05:39:25.993 に答える