2016-03-06 47 views
0

我正在使用新聞應用程序。我有5類新聞欄目。每個標籤或部分調用不同的URL,並在本地數據庫中有一個單獨的表,因此在檢索本地數據時使用不同的URI(使用ContentProvider)。確定哪個類稱爲IntentService

我有一個AsyncTask爲所有請求提供服務。它根據傳遞給它的類的實例確定要調用哪個url或uri。所有的選項卡/節/片段/類繼承了一個共同的基類..

現在,我想將AsyncTask更改爲IntentService,所以我可以使用AlarmManager類。我注意到,似乎沒有通過意圖傳遞對象的簡單方法。

我需要一種方法來確定稱爲IntentService的5個類中的哪個特定類,以便採取適當的操作。

該類時調用的類的實例來確定:

public class GetURL { 
public static URL GetURL(TabsSuperClass tabs) 
{ 
    URL url = null; 
    try { 
     if(tabs instanceof CultureFrag) 
     { 
      final String baseUri = "http://content.guardianapis.com/search?"; 
      Uri uriBuilder = Uri.parse(baseUri) 
        .buildUpon() 
        .appendQueryParameter("section", "culture|local|music|books|society") 
        .appendQueryParameter("order-by", "newest") 
        .appendQueryParameter("use-date", "published") 
        .appendQueryParameter("show-fields", "trailText,thumbnail") 
        .appendQueryParameter("page", String.valueOf(TabsSuperClass.pageSize)) 
        .appendQueryParameter("page-size", "10") 
        .appendQueryParameter("api-key", "Test-Key") 
        .build(); 
      url = new URL(uriBuilder.toString()); 

     } 
     else if(tabs instanceof LifeStyleFrag) 
     { 
      final String baseUri = "http://content.guardianapis.com/search?"; 
      Uri uriBuilder = Uri.parse(baseUri) 
        .buildUpon() 
        .appendQueryParameter("section", "lifeandstyle|education|fashion|help") 
        .appendQueryParameter("order-by", "newest") 
        .appendQueryParameter("use-date", "published") 
        .appendQueryParameter("show-fields", "trailText,thumbnail") 
        .appendQueryParameter("page", String.valueOf(LifeStyleFrag.pageSize)) 
        .appendQueryParameter("page-size", "10") 
        .appendQueryParameter("api-key", "Test-Key") 
        .build(); 
      url = new URL(uriBuilder.toString()); 
     } 
     else if(tabs instanceof ScienceFrag) 
     { 
      final String baseUri = "http://content.guardianapis.com/search?"; 
      Uri uriBuilder = Uri.parse(baseUri) 
        .buildUpon() 
        .appendQueryParameter("section", "science|environment|technology|business") 
        .appendQueryParameter("order-by", "newest") 
        .appendQueryParameter("use-date", "published") 
        .appendQueryParameter("show-fields", "trailText,thumbnail") 
        .appendQueryParameter("page", String.valueOf(ScienceFrag.pageSize)) 
        .appendQueryParameter("page-size", "10") 
        .appendQueryParameter("api-key", "Test-Key") 
        .build(); 
      url = new URL(uriBuilder.toString()); 
     } 
     else if(tabs instanceof SportFrag) 
     { 
      final String baseUri = "http://content.guardianapis.com/search?"; 
      Uri uriBuilder = Uri.parse(baseUri) 
        .buildUpon() 
        .appendQueryParameter("section", "sport|football") 
        .appendQueryParameter("order-by", "newest") 
        .appendQueryParameter("use-date", "published") 
        .appendQueryParameter("show-fields", "trailText,thumbnail") 
        .appendQueryParameter("page", String.valueOf(SportFrag.pageSize)) 
        .appendQueryParameter("page-size", "10") 
        .appendQueryParameter("api-key", "Test-Key") 
        .build(); 
      url = new URL(uriBuilder.toString()); 
     } 
     else if(tabs instanceof WorldFrag) 
     { 
      final String baseUri = "http://content.guardianapis.com/search?"; 
      Uri uriBuilder = Uri.parse(baseUri) 
        .buildUpon() 
        .appendQueryParameter("section", "world|opinion|media|us-news|australia-news|uk-news") 
        .appendQueryParameter("order-by", "newest") 
        .appendQueryParameter("use-date", "published") 
        .appendQueryParameter("show-fields", "trailText,thumbnail") 
        .appendQueryParameter("page", String.valueOf(WorldFrag.pageSize)) 
        .appendQueryParameter("page-size", "10") 
        .appendQueryParameter("api-key", "Test-Key") 
        .build(); 
      url = new URL(uriBuilder.toString()); 
     } 
    } 
    catch (MalformedURLException e) 
    { 
     e.printStackTrace(); 
    } 

    return url; 
} 

public static Uri GetContentUri(TabsSuperClass tabs) 
{ 
    Uri uri = null; 

    if(tabs instanceof CultureFrag) 
    { 
     return NewsContract.CONTENT_URI_CULTURE; 
    } 
    else if(tabs instanceof LifeStyleFrag) 
    { 
     return NewsContract.CONTENT_URI_LIFESTYLE; 
    } 
    else if(tabs instanceof ScienceFrag) 
    { 
     return NewsContract.CONTENT_URI_SCIENCE; 
    } 
    else if(tabs instanceof SportFrag) 
    { 
     return NewsContract.CONTENT_URI_SPORT; 
    } 
    else if(tabs instanceof WorldFrag) 
    { 
     return NewsContract.CONTENT_URI_WORLD; 
    } 

    return uri; 
} 

}

urlConnection = (HttpURLConnection)GetURL.GetURL(_fragment).openConnection(); 

這樣的情況:這個類被稱爲是在這裏,當我將數據插入到名爲

private void InsertIntoTable(List<NewsFacade> data) { 
    for (NewsFacade facade : 
      data) { 
     ContentValues values = new ContentValues(); 
     values.put(NewsContract.DataContract.COLUMN_NAME_DATE, facade.getDate()); 
     values.put(NewsContract.DataContract.COLUMN_NAME_CONTENT, facade.getText()); 
     values.put(NewsContract.DataContract.COLUMN_NAME_TAG, facade.getTag()); 
     byte[] image = EncodeImage(facade.getThumb()); 
     values.put(NewsContract.DataContract.COLUMN_NAME_THUMB, image); 
     values.put(NewsContract.DataContract.COLUMN_NAME_TITLE, facade.getTitle()); 
     values.put(NewsContract.DataContract.COLUMN_NAME_WEBADDRESS, facade.getWebAddress()); 
     _fragment.mResolver.insert(GetURL.GetContentUri(_fragment), values); 
    } 
} 

回答

0

我需要一種確定稱爲IntentService的5個類中的哪個特定類的方法,以便採取適當的操作。

把一個額外的,你傳遞給startActivity()指示IntentService應該做什麼Intent。您在IntentServiceonHandleIntent()中獲得Intent的副本,因此您可以檢索額外資源並根據其值獲取適當的步驟。

+0

感謝您的回覆。這是一個好方法。但是,我需要參考活動。就像它的ContentResolver,以及它的一些布爾變量的狀態一樣。 –

+0

這是關於發送對象的帖子之一[如何在Android上將一個對象從一個活動傳遞給另一個](http://stackoverflow.com/questions/2736389/how-to-pass-an-object-from-one -activity到另一個上,機器人)。我確實開始這樣做,但遇到了類不可序列化的問題,所以採取了另一種方式(onResume適用於我的情況)。 – MikeT

+0

@ClintonYeboah:「但是,我需要參考活動」 - 這不是一個合適的選擇。 「就像它的ContentResolver一樣 - 你的IntentService完全可以通過調用getContentResolver()來獲得自己的ContentResolver。 「和它的一些布爾變量的狀態」 - 把它們當作額外的。 – CommonsWare

0

在活動上我補充: -

private final static String THIS_ACTIVITY = "AddProductToShopActivity"; 

爲我添加的意圖:

intent.putExtra("CALLER", THIS_ACTIVITY); 

在開始活動: -

final String caller = getIntent().getStringExtra("Caller"); 
+0

感謝您的回覆。這是一個好方法。但是,我需要參考活動。就像它的ContentResolver,以及它的一些布爾變量的狀態一樣。 –