2016-06-20 49 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窗口小部件的AsyncTask

我試圖讓JSON的一個小部件的一部分(即我先前解析)。我使用AsyncTask將其與主線程分開,並使用OkHttpClient庫來獲取JSON。我有類PostTask得到我解析的JSON。但可以請任何人告訴我如何顯示它在小部件中。這是代碼。

+1

你想要顯示哪個小部件? – Vucko

+1

嘗試遵循Android命名約定。你的'MainActivity'有'BroadcastReceiver'類型,而不是'Activity' –

+0

@Vucko我想在textview中顯示任何android小部件中解析的JSON –

回答

0

創建一個自定義事件,這樣的事情:在地方

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

}

現在你在哪裏發佈事件,只需創建要發送到JSON這個自定義事件你的小部件。 (把這個代碼放在onPostExecute)。

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

現在只需無論你的TextView的是,在活動或片段,註冊eventBus在onCreate

EventBus.getDefault().register(this); 

,並創建一個偵聽這樣的事件的方法:

@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 
} 
相關問題