2016-06-20 19 views
0
public class MainActivity extends AppWidgetProvider 
{ 

    TextView tv; 
RemoteViews views; 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

     super.onUpdate(context,appWidgetManager,appWidgetIds); 
     for(int i=0; i<appWidgetIds.length; i++){ 
      int currentWidgetId = appWidgetIds[i]; 

      views = new RemoteViews(context.getPackageName(),R.layout.activity_main); 
      appWidgetManager.updateAppWidget(currentWidgetId,views); 
      new PostTask().execute("url"); 

     } 
    } 

private class PostTask extends AsyncTask<String, String, String> { 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String url = params[0]; 

     // Dummy code 

     OkHttpClient client = new OkHttpClient(); 
     client.setConnectTimeout(1, TimeUnit.MINUTES); // connect timeout 
     client.setReadTimeout(1, TimeUnit.MINUTES); // socket timeout 

     MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); 
     RequestBody body = RequestBody.create(mediaType, "data=something"); 
     Request request = new Request.Builder() 
       .url(url) 
       .post(body) 
       .addHeader("cache-control", "no-cache") 
       .addHeader("postman-token", "7a4d5df8-5aed-19bf-e1fb-c85f821c1d10") 
       .addHeader("content-type", "application/x-www-form-urlencoded") 
       .build(); 
     Response response = null; 
     try { 
      response = client.newCall(request).execute(); 
      return response.body().string(); 
     } catch (Exception e1) { 
      e1.printStackTrace(); 
      return e1.toString(); 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     String data = ""; 
     try { 
      JSONObject jsonRootObject = new JSONObject(result); 

      //Get the instance of JSONArray that contains JSONObjects 
      JSONArray jsonArray = jsonRootObject.optJSONArray("response_data"); 

      //Iterate the jsonArray and print the info of JSONObjects 
      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 

       int id = Integer.parseInt(jsonObject.optString("CDRId").toString()); 
       String name = jsonObject.optString("Status").toString(); 

       data += "Agent : " + (i + 1) + "\nCDRId : " + id + " \n Status : " + name + " \n "; 
      } 
      views.setTextViewText(R.id.tv,data); 
     } catch (Exception e) { 
      views.setTextViewText(R.id.tv,e.toString()); 
     } 


    } 
} 

}Android Widget mit AsyncTask

Ich versuche, einen Teil von JSON zu bekommen in einem Widget (die ich vorher analysiert haben). Ich verwende AsyncTask, um es vom Hauptthread zu trennen, und ich benutze OkHttpClient-Bibliothek, um JSON zu erhalten. Ich habe Klasse PostTask, die mir die geparste JSON bekommt. Kann mir aber bitte jemand sagen wie ich es im Widget anzeigen kann. Dies ist der Code.

+1

In welchem ​​Widget soll es angezeigt werden? – Vucko

+1

Versuchen Sie, die Namenskonventionen von Android zu befolgen. Ihre 'MainActivity' gibt es eine Art' BroadcastReceiver', keine 'Activity' –

+0

@Vucko Ich möchte den geparsten JSON in jedem Android Widget mit einem Textview anzeigen –

Antwort

0

Erstellen Sie eine benutzerdefinierte Ereignis, so etwas wie dieses:

public class MyEvent { 
private String text; 

public MyEvent(String text) { 
    this.text = text; 
} 

public String getText() { 
    return text; 
} 

public void setText(String text) { 
    this.text= text; 
} 

}

nun an dem Ort, in dem Sie das Ereignis sind Posting, erstellen Sie einfach diese benutzerdefinierten Event mit dem json Sie senden möchten dein Widget (Setzen Sie diesen Code in onPostExecute).

EventBus.getDefault().post(new MyEvent(result); 

jetzt einfach überall dort, wo Sie Ihre Textview ist, in Aktivität oder Fragmente, registrieren die EventBus in onCreate:

EventBus.getDefault().register(this); 

und ein Verfahren schaffen, die für die Veranstaltung wie diese hört:

@Subscribe 
public void onMyEvent(MyEvent myEvent){ 
    String text = myEvent.getText(); 
    //Now you can parse this text, if it's JSON, or you can simply set it 
    //to your textView or whatever 
}