2016-03-06 4 views
0

Я работаю над новостным приложением. У меня есть 5 категорий новостей. Каждая вкладка или раздел вызывает другой URL-адрес и имеет отдельную таблицу в локальной базе данных, поэтому при получении локальных данных используется другой URI (используя ContentProvider).Определите, какой класс называется IntentService

У меня есть одна AsyncTask, которая обслуживает все запросы. Он определяет, какой url или uri вызывать на основе экземпляра класса, переданного ему. Все вкладки/разделы/фрагменты/классы наследуются от общего базового класса.

Теперь я хочу изменить AsyncTask на IntentService, поэтому я могу использовать класс AlarmManager. Я заметил, что, кажется, нет простого способа передать объект через намерения.

Мне нужен способ определения того, какой именно класс из 5 классов называется IntentService, поэтому выполняется соответствующее действие.

Этот класс вызывается, когда экземпляр класса должен быть определен:

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

Мне нужен способ определения того, какой именно класс из 5 классов называется IntentService, поэтому соответствующие действия принимаются.

Поместите дополнительный на Intent, что вы передаете startActivity(), что указывает на то, что IntentService должен делать. Вы получаете копию этого Intent в onHandleIntent() в IntentService, поэтому вы можете получить дополнительную информацию и предпринять соответствующие шаги на основе ее значения.

+0

Спасибо за Ваш ответ , Это хороший подход. Тем не менее, мне нужна рецензия на эту деятельность. Как и его ContentResolver, и состояние некоторых из его булевых переменных. –

+0

Это одна из сообщений о отправке объектов [Как передать объект из одного вида деятельности другому на Android] (http://stackoverflow.com/questions/2736389/how-to-pass-an-object-from-one к-активности-другому-на-андроида). Я начал это делать, но имел проблемы с сериализацией классов, поэтому пошел другой путь (onResume работал для моей ситуации). – MikeT

+0

@ClintonYeboah: «Тем не менее, мне нужна рефеция к действию» - это не подходящий вариант. «Как и его ContentResolver» - ваш «IntentService» отлично способен получить свой собственный ContentResolver, вызвав 'getContentResolver()'. «и состояние некоторых из его булевых переменных» - передайте их как дополнительные функции. – CommonsWare

0

В верхней части деятельности я добавляю: -

private final static String THIS_ACTIVITY = "AddProductToShopActivity"; 

для намерений я добавить:

intent.putExtra("CALLER", THIS_ACTIVITY); 

В запущенном деятельности: -

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

Спасибо за ваш ответ. Это хороший подход. Тем не менее, мне нужна рецензия на эту деятельность. Как и его ContentResolver, и состояние некоторых из его булевых переменных. –

Смежные вопросы