문제

내 코드에서 방송 메시지가 수신되면 타이머 스탁을 시작하고 있습니다. 여기에 두 클래스의 코드가 표시되었습니다. 1. 방송 수신기. 2. XML 파싱.

내 질문은 예정된 시간 타이머 호출에 Timertask를 호출 할 때입니다. 모든 데이터를 XML 클래스로 가져옵니다. "MSERVICELIST". 그러나이 배열을 사용하고 싶을 때마다 널이 될 때마다.

내가 어디에서 잘못하고 있는지 잘 모르겠습니다.

몸에 아이디어가 있다면 훌륭합니다.

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

    }
}

그래도 내 질문을 이해하는 것에 관한 질문이 있습니다. 대답을 원하기 때문에.

짧은 참고 : 파싱 데이터를 방송 수신기 클래스에 사용하고 싶습니다.

감사,

도움이 되었습니까?

해결책

나는 당신의 브로드 카스트레드를 이해할 수 없었습니다 onReceive(Context context, Intent intent) , 당신은 전화했습니다 updatePreviousWidgetListener(context); 이 방법. 그러나 나머지 코드는이 방법에 대한 호출을 보여주지 않습니다.

내가 틀리지 않으면 당신은 잘못된 방법을 불렀습니다. onReceive(Context context, Intent intent). 언제 updatePreviousWidgetListener(context); 전화를 걸어?

내가 틀렸다면 나를 수정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top