0

我正在尝试为我正在从事的项目创建一个 RSS 提要阅读器。我让它正确地将所有内容解析为文本视图,唯一的问题是它不会显示我从解析的 xml 文件中获取的图像,该文件获取 html 描述。我得到一堆蓝色块而不是图像。因此,我尝试使用适用于 Html.toHtml 方法的 ImgGetter 方法,该方法可以将 html 标记转换为 android 中 textview 的普通 Web 文本,尽管我遵循了一些指南,但它仍然只显示蓝色块而不是图像。

这是我的代码:

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;
        }
    };

}

我发现 webview 效果更好,这就是我编辑代码时所做的:

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"));

    }

}
4

1 回答 1

0

改用 webview,效果很好。解决方案在我的第一篇文章中。

于 2011-06-16T18:27:40.720 回答