我正在使用新聞應用程序。我有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);
}
}
感謝您的回覆。這是一個好方法。但是,我需要參考活動。就像它的ContentResolver,以及它的一些布爾變量的狀態一樣。 –
這是關於發送對象的帖子之一[如何在Android上將一個對象從一個活動傳遞給另一個](http://stackoverflow.com/questions/2736389/how-to-pass-an-object-from-one -activity到另一個上,機器人)。我確實開始這樣做,但遇到了類不可序列化的問題,所以採取了另一種方式(onResume適用於我的情況)。 – MikeT
@ClintonYeboah:「但是,我需要參考活動」 - 這不是一個合適的選擇。 「就像它的ContentResolver一樣 - 你的IntentService完全可以通過調用getContentResolver()來獲得自己的ContentResolver。 「和它的一些布爾變量的狀態」 - 把它們當作額外的。 – CommonsWare