Question

J'essaie de créer un lecteur de flux RSS pour un projet sur lequel je travaille. Je l'ai obtenu pour tout analyser correctement dans un TextView Le seul problème est qu'il n'affiche pas les images que j'obtiens du fichier XML analysé qui obtient la description HTML. Je reçois un tas de blocs bleus au lieu des images. J'ai donc essayé d'utiliser la méthode IMGGetter qui fonctionne pour la méthode html.tohtml qui peut convertir des balises HTML en texte Web normal pour un TextView dans l'ondroid, bien que j'aie suivi certains guides et il affiche toujours les blocs bleus au lieu de l'image.

Voici mon code:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import project.gate6.rssreader.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;

public class ShowDetails extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);




        TextView detailsTitle = (TextView)findViewById(R.id.detailstitle);
        TextView detailsDescription = (TextView)findViewById(R.id.detailsdescription);
        TextView detailsPubdate = (TextView)findViewById(R.id.detailspubdate);
        TextView detailsLink = (TextView)findViewById(R.id.detailslink);


        Bundle bundle = this.getIntent().getExtras();



        detailsTitle.setText(bundle.getString("keyTitle"));
        detailsDescription.setText(Html.fromHtml(bundle.getString("keyDescription"),imgGetter,null));
        detailsDescription.setMovementMethod(new ScrollingMovementMethod());
        detailsPubdate.setText(bundle.getString("keyPubdate"));
        detailsLink.setText(bundle.getString("keyLink"));

    }

    static ImageGetter imgGetter = new Html.ImageGetter() {
        @Override
        public Drawable getDrawable(String source) {
            HttpGet get = new HttpGet(source);
            DefaultHttpClient client = new DefaultHttpClient();
            Drawable drawable = null;
            try{
                HttpResponse response = client.execute(get);
                InputStream stream = response.getEntity().getContent();
                FileOutputStream fileout = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getAbsolutePath()));
                int read = stream.read();
                while(read != -1)
                {
                    fileout.write(read);
                    read = stream.read();
                }
                fileout.flush();
                fileout.close();
                drawable = Drawable.createFromPath(Environment.getExternalStorageDirectory().getAbsolutePath());
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

            }
            catch(ClientProtocolException e)
            {
                e.printStackTrace();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
            return drawable;
        }
    };

}

J'ai compris qu'un WebView fonctionne mieux ici, c'est ce que j'ai fait pour modifier mon code:

import project.gate6.rssreader.R;
import android.app.Activity;
import android.os.Bundle;

import android.webkit.WebView;
import android.widget.TextView;

public class ShowDetails extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);

        final String mimetype = "text/html";
        final String encoding = "UTF-8";


        TextView detailsTitle = (TextView)findViewById(R.id.detailstitle);
        WebView detailsDescription = (WebView)findViewById(R.id.detailsdescription);
        TextView detailsPubdate = (TextView)findViewById(R.id.detailspubdate);
        TextView detailsLink = (TextView)findViewById(R.id.detailslink);


        Bundle bundle = this.getIntent().getExtras();



        detailsTitle.setText(bundle.getString("keyTitle"));
        detailsDescription.loadDataWithBaseURL("",bundle.getString("keyDescription"), mimetype, encoding, "");
        detailsPubdate.setText(bundle.getString("keyPubdate"));
        detailsLink.setText(bundle.getString("keyLink"));

    }

}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top