Frage

In meinem Code starte ich Timertask, wenn die Broadcast -Nachricht empfangen wird. Hier habe ich Code von zwei Klassen angezeigt. 1. Broadcast Receiver. 2. XML -Parsen.

Meine Frage ist, wenn ich Timertask auf den geplanten Timer -Timer -Anruf aufrufe und alle Daten in die XML -Klasse erhalten. Like. "Mservicelist". Aber wenn ich dieses Array jedes Mal verwenden möchte, wenn es null wird.

Ich bin mir nicht sicher, wo ich falsch mache.

Wenn irgendein Körper eine Idee hat, dann ist es großartig.

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();
        }

    }
}

Trotzdem haben Sie eine Frage, um meine Frage zu verstehen. Bitte sagen Sie mir, ich werde mein Bestes geben, um meine Anfrage zu verstehen. Weil ich Antwort will.

Kurzer Hinweis: Ich möchte die Parsingdaten in die Sendungsempfängerklasse verwenden.

Vielen Dank,

War es hilfreich?

Lösung

Ich konnte nicht verstehen, in Ihrem Sender onReceive(Context context, Intent intent) , du hast angerufen updatePreviousWidgetListener(context); diese Methode. Der Rest Ihres Codes zeigt jedoch keinen Anruf bei dieser Methode.

Wenn ich mich nicht irre, haben Sie eine falsche Methode in der Methode angerufen onReceive(Context context, Intent intent). Wann updatePreviousWidgetListener(context); angerufen werden?

Korrigieren Sie mich, wenn ich falsch liege.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top