2016-07-17 19 views
0

Ich versuche, ein erzwungenes benutzerdefiniertes Update eines Widgets zu implementieren. Bisher werden die Daten beim Empfang einer Benachrichtigung gelesen, aber beim Versuch, das Widget mit diesen Daten zu aktualisieren, erhalte ich einen Fehler. Es besagt, dass ich die Funktion picasso.load.into aus dem UI-Thread verwenden muss. Wie kann ich dies von einem Widget ohne Aktivität tun? und im Benachrichtigungsdienst? Mein Code ist unten.Kann Widget-Benutzeroberfläche nicht in NotificationExtenderService aktualisieren

NotificationServiceClass

public class NotificationEx extends NotificationExtenderService { 
    private String l; 
    private String x; 
    @Override 
    protected boolean onNotificationProcessing(OSNotificationPayload notification) { 
     // Read properties from notification. 
     JSONObject jsonObject = notification.additionalData; 
     if (jsonObject.has("pic")) { 
      try { 
       l = jsonObject.getString("pic"); 
       Log.e("treeN",l); 
      } catch (Exception e) { 
       Log.e("treeN",e.getMessage()); 
      } 

     } 

     if (jsonObject.has("quote")) { 
      try { 
       x = jsonObject.getString("quote"); 
       Log.e("treeN",x); 
      } catch (Exception e) { 
       Log.e("treeN",e.getMessage()); 
      } 
     } 
     if (x!=null&&l!=null) { 
      /*MyApplication myApplication = new MyApplication(); 
      myApplication.setPushedInfo(l,x);*/ 
      setPushedInfo(l,x); 
     } 

     // Return true to stop the notifications from displaying. 
     return false; 
    } 

    public void setPushedInfo(String pic, String quote) { 
     RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.widget_home); 
     remoteViews.setTextViewText(R.id.widget_text, quote); 
     Picasso picasso = Picasso.with(this); 
     ComponentName thisWidget = new ComponentName(this, WidgetProvider.class); 
     int[] views = AppWidgetManager.getInstance(this).getAppWidgetIds(thisWidget); 
     picasso.load(pic) 
       .into(remoteViews, R.id.widget_background,views); 

    } 
} 

Antwort

0

Wo picasso.load.into Bedürfnisse verwendet wird, wie diese

Handler uiHandler = new Handler(Looper.getMainLooper()); 
    uiHandler.post(new Runnable(){ 
     @Override 
     public void run() { 
      picasso.load(pic) 
        .into(remoteViews, R.id.widget_background,views); 
     } 
    }); 
ausgeführt werden soll
Verwandte Themen