2017-03-08 2 views
0

Je crée une application Android qui comprend un flux RSS. À l'heure actuelle, j'ai programmé l'application pour récupérer les données d'un flux xml et montrer comment je voudrais. Cependant, je ne sais pas comment ajouter plusieurs flux xml à mon programme. J'aimerais que l'application affiche les données de plus d'un flux/lien. Je tire actuellement mon flux unique directement à partir de l'URL Web. Je suis un débutant en programmation Java et avec Android Studio donc c'est probablement pourquoi je n'arrive pas à comprendre ça! Quelqu'un a suggéré un fichier txt pour contenir tous les liens de flux, mais je ne suis pas sûr de savoir comment coder ceci.Comment ajouter plusieurs flux dans un flux RSS?

Si vous avez besoin de plus de ces fichiers, veuillez m'en informer. Je pense avoir inclus les fichiers pertinents. Toutes nos excuses pour être Nooby, toute aide serait massivement appréciée!

ReadRSS.java:

package com.example.liutaurasmazonas.cslogintrying; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.provider.DocumentsContract; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import static android.R.attr.data; 

/** 
* Created by Joe on 04/03/2017. 
*/ 
public class ReadRss extends AsyncTask<Void,Void,Void>{ 
    ArrayList<FeedItem>feedItems; 
    RecyclerView recyclerView; 
    Context context; 
    String address="https://www.bloomberg.com/feeds/podcasts/etf_report.xml"; 
    ProgressDialog progressDialog; 
    URL url; 
    public ReadRss(Context context, RecyclerView recyclerView){ 
     this.recyclerView=recyclerView; 
     this.context=context; 
     progressDialog=new ProgressDialog(context); 
     progressDialog.setMessage("Loading..."); 
    } 

    @Override 
    protected void onPreExecute() { 
     progressDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 

     super.onPostExecute(aVoid); 
     progressDialog.dismiss(); 
     MyAdapter adapter=new MyAdapter(context,feedItems); 
     recyclerView.setLayoutManager(new LinearLayoutManager(context)); 
     recyclerView.addItemDecoration(new VerticalSpace(50)); 
     recyclerView.setAdapter(adapter); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     ProcessXml(Getdata()); 
     return null; 
    } 

    private void ProcessXml(Document data) { 
     if (data != null){ 
      feedItems=new ArrayList<>(); 
      Element root=data.getDocumentElement(); 
      Node channel=root.getChildNodes().item(0); 
      NodeList items=channel.getChildNodes(); 
      for (int i=0;i<items.getLength();i++){ 
       Node currentchild=items.item(i); 
       if (currentchild.getNodeName().equalsIgnoreCase("item")){ 
        FeedItem item=new FeedItem(); 
        NodeList itemchilds=currentchild.getChildNodes(); 
        for (int j=0;j<itemchilds.getLength();j++){ 
         Node current=itemchilds.item(j); 
         if (current.getNodeName().equalsIgnoreCase("title")){ 
          item.setTitle(current.getTextContent()); 
         }else if (current.getNodeName().equalsIgnoreCase("itunes:summary")){ 
          item.setDescription(current.getTextContent()); 
         }else if (current.getNodeName().equalsIgnoreCase("pubDate")){ 
          item.setPubDate(current.getTextContent()); 
         }else if (current.getNodeName().equalsIgnoreCase("link")){ 
          item.setLink(current.getTextContent()); 
         } 

        } 
        feedItems.add(item); 
//     Log.d("itemTitle", item.getTitle()); 
//     Log.d("itemDescription", item.getTitle()); 
//     Log.d("itemLink", item.getTitle()); 
//     Log.d("itemPubDate", item.getTitle()); 
       } 
      } 
     } 
    } 

    public Document Getdata(){ 
     try { 
      url=new URL(address); 
      HttpURLConnection connection= (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      InputStream inputStream=connection.getInputStream(); 
      DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder=builderFactory.newDocumentBuilder(); 
      Document xmlDoc = builder.parse(inputStream); 
      return xmlDoc; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 
} 

MyAdapter.java

package com.example.liutaurasmazonas.cslogintrying; 

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.daimajia.androidanimations.library.Techniques; 
import com.daimajia.androidanimations.library.YoYo; 

import org.w3c.dom.Text; 

import java.util.ArrayList; 

/** 
* Created by Joe on 05/03/2017. 
*/ 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{ 
    ArrayList<FeedItem>feedItems; 
    Context context; 
    public MyAdapter(Context context,ArrayList<FeedItem>feedItems){ 
     this.feedItems=feedItems; 
     this.context=context; 
    } 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view= LayoutInflater.from(context).inflate(R.layout.custum_row_news_item,parent,false); 
     MyViewHolder holder=new MyViewHolder(view); 
     return holder; 

    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     YoYo.with(Techniques.FadeIn).playOn(holder.cardView); 
     final FeedItem current=feedItems.get(position); 
     holder.Title.setText(current.getTitle()); 
     holder.Description.setText(current.getDescription()); 
     holder.Date.setText(current.getPubDate()); 
     holder.cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(context, NewsDetails.class); 
       intent.putExtra("Link", current.getLink()); 
       context.startActivity(intent); 
      } 
     }); 

    } 

    @Override 
    public int getItemCount() { 
     return feedItems.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     TextView Title,Description,Date; 
     CardView cardView; 
     public MyViewHolder(View itemView) { 
      super(itemView); 
      Title= (TextView) itemView.findViewById(R.id.title_text); 
      Description=(TextView) itemView.findViewById(R.id.description_text); 
      Date=(TextView) itemView.findViewById(R.id.date_text); 
      cardView= (CardView) itemView.findViewById(R.id.cardview); 
     } 
    } 
} 
+0

Pouvez-vous publier d'autres liens à partir desquels vous souhaitez extraire le flux? –

Répondre

1

Vous pouvez simplement ajouter une autre RecyclerView à votre mise en page XML où vous souhaitez afficher des flux multiples, puis utilisez un autre Asynctask et un adaptateur pour charger les flux à partir d'une URL différente sur le nouveau RecyclerView.

Comme ça,

public class ReadRssFromUrl extends AsyncTask<Void,Void,Void>{ 
ArrayList<FeedItem>feedItems; 
RecyclerView recyclerView1; 
Context context; 
String address="aDifferentUrl.xml"; 
ProgressDialog progressDialog; 
URL url; 
public ReadRss(Context context, RecyclerView recyclerView1){ 
    this.recyclerView1=recyclerView1; 
    this.context=context; 
    progressDialog=new ProgressDialog(context); 
    progressDialog.setMessage("Loading..."); 
} 

Ainsi, le RecyclerView vous passez à ce constructeur devrait être le nouveau.

Espérons que cela aide.

+0

Vous pouvez également conserver la même classe Asynctask et envoyer la nouvelle URL et le nouveau RecyclerView via le constructeur, puis définir l'adaptateur comme vous le faites actuellement. – hsm59