0

Android ウィジェット (ホーム画面のウィジェット) について質問があります。定期的にコンテンツを更新するウィジェットを作成しようとしています。

そのために呼び出される Service を使用します。このサービス内で基本的なネットワーク呼び出し (GET) を実行しようとすると、NetworkOnMainThread 例外が発生します。

この例外が何であるかは知っていますが、Android のサービスは別のスレッドにあると思いました。だから私はちょうど間違った...

そのために、AsyncTask を実行しましたが、自分のコードに満足していません。私の考えが正しいかどうか誰かに電話してください。

ここに私のサービスの内容があります:

public class ServiceUpdate extends Service
{
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    new AsyncTask<Void, Void, Void>()
    {
        String res = null;

        @Override
        protected Void doInBackground(Void... params)
        {
            // Getting something from the WWW
            res = Network.getStringFromWS("http://wordpress.org/plugins/about/readme.txt");
            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {
            // Substring for test
            res = res.substring(0, 100);

            RemoteViews remoteViews = new RemoteViews(getApplicationContext().getPackageName(),
                    R.layout.widget_layout);
            remoteViews.setTextViewText(R.id.tvTime, res);

            ComponentName thiswidget = new ComponentName(getApplicationContext(), TimeWidgetProvider.class);
            AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
            manager.updateAppWidget(thiswidget, remoteViews);

            super.onPostExecute(result);
        }
    }.execute();

    return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent arg0)
{
    return null;
}

}

皆様、ご意見ありがとうございます!

4

1 に答える 1