¿Cómo es posible tener feeds de diferentes Urls en el mismo ListView

Con mi proyecto actual, puedo tomar datos de una sola URL y luego mostrarlos en mi Lista personalizada. ¿Así que hay una manera de obtener datos de más de una Url y luego poner en el mismo ListView, incluso si los datos de cada Url se llaman de manera diferente? Este es mi código que me permite tener los elementos de una URL:

public class CLASS1 extends Fragment { private RSSFeed myRssFeed = null; public CLASS1() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.tab1, null); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } try { URL rssUrl = new URL("URL"); SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance(); SAXParser mySAXParser = mySAXParserFactory.newSAXParser(); XMLReader myXMLReader = mySAXParser.getXMLReader(); RSSHandler myRSSHandler = new RSSHandler(); myXMLReader.setContentHandler(myRSSHandler); InputSource myInputSource = new InputSource(rssUrl.openStream()); myXMLReader.parse(myInputSource); myRssFeed = myRSSHandler.getFeed(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (myRssFeed!=null) { ListView list = (ListView)view.findViewById(android.R.id.list); CustomList adapter = new CustomList(getActivity(),myRssFeed.getList()); adapter.addAll(); list.setAdapter(adapter); } else Toast.makeText(getActivity(), "Spiacente, connessione non disponibile!" + " Prova più tardi.", Toast.LENGTH_LONG).show(); return view; } } 

Estoy haciendo exactamente esto en mi aplicación,

Esto es cómo estoy haciendo esto, he creado AsyncTask para analizar RSS, y utilizando un bucle para pasar diferentes URL para ser analizados a AysncTask .

Aquí es lo que quiero decir,

Esta es la matriz de URL,

 private String[] newsURLs = { "url1", "url2", "url3" }; 

Así es como los estoy ejecutando,

 //GetNews is AsyncTask class for (int i = 0; i < newsURLs.length; i++) { GetNews blog = new GetNews(i); blog.execute(); } 

En el código anterior i es el número de URL pasado como constructor en la clase AsyncTask .

Aquí está mi constructor en AsyncTask clase,

 int number; public GetNews(int urlNumber) { number = urlNumber; } 

Y cargar la URL en el AsyncTask doInBackground() esta manera,

  URL feedURL = new URL(newsURLs[number]); HttpURLConnection connection; connection = (HttpURLConnection) feedURL.openConnection(); connection.setConnectTimeout(8000); connection.connect(); 

Después de eso, estoy usando SAXParser para analizar xml basado en mi necesidad.

Tenga en cuenta que si desea una ejecución paralela, reemplace blog.execute(); con

 blog.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); // this type of executor uses the following params: // // private static final int CORE_POOL_SIZE = 5; // private static final int MAXIMUM_POOL_SIZE = 128; // private static final int KEEP_ALIVE = 1; // // private static final ThreadFactory sThreadFactory = new ThreadFactory() { // private final AtomicInteger mCount = new AtomicInteger(1); // // public Thread newThread(Runnable r) { // return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); // } // }; // // private static final BlockingQueue<Runnable> sPoolWorkQueue = // new LinkedBlockingQueue<Runnable>(10); 

También tenga en cuenta que,

Cuando se introdujo por primera vez, AsyncTasks se ejecutaron en serie en un solo hilo de fondo. Comenzando
Con DONUT, esto fue cambiado a un grupo de hilos permitiendo múltiples tareas para operar en paralelo. Después de HONEYCOMB, se planea cambiar esto de nuevo a un solo hilo para evitar errores comunes de aplicación causados ​​por la ejecución paralela. Si realmente desea una ejecución paralela, puede utilizar la versión executeOnExecutor (Executor, Params …) de este método con THREAD_POOL_EXECUTOR; Sin embargo, ver comentarios allí para advertencias sobre su uso.

DONUT es Android 1.6, HONEYCOMB es Android 3.0.

También puede ejecutar la tarea en función de la versión que tenga,

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { blog.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { blog.execute(); } 

Este es mi código parcial para mostrar lo que estoy haciendo,

  // This is my Main class private String[] newsURLs = { "url1", "url2", "url3" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_myapp); for (int i = 0; i < newsURLs.length; i++) { GetNews blog = new GetNews(i); blog.execute(); } } } 

Esta es la clase AsyncTask (código parcial),

 private class GetNews extends AsyncTask<Object, Void, Void> { protected int number; public GetNews(int urlNumber) { number = urlNumber; } @Override protected void doInBackground( Object... arg0) { try { // Check if the feed is Live URL feedURL = new URL(newsURLs[number]); HttpURLConnection connection; connection = (HttpURLConnection) feedURL.openConnection(); connection.setConnectTimeout(8000); connection.connect(); 
  • ¿Es posible mostrar una miniatura de vídeo desde una URL en Android 4 o superior?
  • Android: longitud máxima de url
  • ¿Cómo funciona Twitter OAuth en Android?
  • Análisis de cadenas de consulta en Android
  • Obtenga la colección de nombres de parámetros de la url de Java / Android
  • Establecer tiempo de espera en URL.openStream () Android
  • Android: muestra una miniatura de vídeo de una URL
  • Esquema personalizado en el texto SMS
  • Error de URL, excepción: carácter no válido en consulta en índice 185
  • Android: establece ImageView en la URL
  • Esquema de url personalizado de Android.?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.