0

私は asynctask を使用して機能関数を実行し、そこで値を取得しています。しかし、ログステートメントで結果が得られますが、テキストビューは更新されません。

ここではカスタム インテントを使用していません。基本的なものだけです。

ここに私のコードスニペットがあります:

    public class ListViewWidget extends AppWidgetProvider{

     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                int[] appWidgetIds) {

        super.onUpdate(context, appWidgetManager, appWidgetIds);
        updateViews = new RemoteViews(context.getPackageName(), R.layout.list_layout);             
        thisWidget = new ComponentName(context, ListViewWidget.class);
        FetchTask fetchTask=new FetchTask();
        AppWidgetManager.getInstance(context.getApplicationContext());
        fetchTask.execute();

        }

//FetchTask

    public static class FetchTask extends AsyncTask<URL,Integer,String> implements ServerRequestEnvironment{

    protected String doInBackground(URL... arg0) {
    //logic part and stuff not entered

    //This is the end part that returns me the result, which is not getting printed to text view.

          String name="";
          int i = new Random().nextInt(27);
          storeObject=store.getStores().getItems().get(i).getStore();

          name= storeObject.getName();
          resultStuff(name);
          Log.i("StoreTag","storeval:"+name);   //returns name of the 0th item      

                return name;
    }//end of doInBackground() method

    protected void onPostExecute(String name) {
                // TODO Auto-generated method stub
          Intent intent=new Intent("android.appwidget.action.APPWIDGET_UPDATE");

          PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
          updateViews.setTextViewText(R.id.text_view,resultStuff(name));
          updateViews.setOnClickPendingIntent(R.id.next, pendingIntent);

          AppWidgetManager manager = AppWidgetManager.getInstance(context.getApplicationContext());

          manager.updateAppWidget(thisWidget, updateViews);
    }//end of PostExecute

    }//End of async task class
    }//end of ListViewWidget class

ここで何が欠けていますか?どうぞご指導ください..

更新: これでよろしいですか? onReceive と onUpdate の両方で呼び出される非同期タスク??

@Override public void onReceive(コンテキスト コンテキスト、インテント インテント){

    if(intent.getAction().equals("android.appwidget.action.APPWIDGET_UPDATE")){
        fetchTask.execute();
    }
}

更新 2:

 public static String name="New text"

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

        super.onUpdate(context, appWidgetManager, appWidgetIds);
        updateViews = new RemoteViews(context.getPackageName(), R.layout.list_layout);

//-----------NEW LINE ADDED-------------
            updateViews.setTextViewText(R.id.text_view,name);
        thisWidget = new ComponentName(context, ListViewWidget.class);

        //Now in onPostExecute()
        //AppWidgetManager manager = AppWidgetManager.getInstance(context.getApplicationContext());
        //manager.updateAppWidget(thisWidget, updateViews);

        fetchTask.execute();

    }
protected void onPostExecute(String name) {
            // TODO Auto-generated method stub
            Intent intent=new Intent("android.appwidget.action.APPWIDGET_UPDATE");

            PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            updateViews.setTextViewText(R.id.text_view,name);
            updateViews.setOnClickPendingIntent(R.id.next, pendingIntent);

            AppWidgetManager manager = AppWidgetManager.getInstance(context.getApplicationContext());
            manager.updateAppWidget(thisWidget, updateViews);
        }

@Dororo わかりませんでした。説明してください。クラスに public var を作成しました。

public static Context context;
        public static RemoteViews updateViews;
        public static ComponentName thisWidget;
        FetchTask fetchTask=new FetchTask(); 
4

3 に答える 3

0

私の例外とエラーを解決しました。コンテキストを null に設定していました。アプリケーションコンテキストでコンテキストを割り当てました。

于 2013-06-20T00:07:28.900 に答える
0

これを使ってみましたか:

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(toThis);
于 2013-06-19T21:02:02.853 に答える
0

を作成するときに、更新された値を上書きしていませんnew ComponentName(context, ListViewWidget.class);か? onUpdateを呼び出すときに呼び出されます。manager.updateAppWidget(thisWidget, updateViews);を使用する必要はありません。最初にオブジェクトを作成した後に に設定staticする初期化が必要なだけです。booleantrue

于 2013-06-19T21:09:10.720 に答える