0

URLからTextViewに画像を読み込もうとすると、1つのことを除いてすべてうまくいきます。ImageGetter から結果を返そうとすると、コード海峡の例外部分にジャンプして、上記のすべてのコードをスキップして例外なしで行を返します。

これがコードです。

package net.cosplace.tabun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

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

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.Spanned;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void TabunLogin(View v)
    {
        TextView txt = (TextView) findViewById(R.id.textView1);
        AsyncTask<String, Void, Spanned> r = new RetreiveFeedTask().execute();

    }

class RetreiveFeedTask extends AsyncTask<String, Void, Spanned> {
        private Exception exception;

        protected Spanned doInBackground(String... urls) {
            try 
            {
                String inputLine = "";
                String buf = "";
                try
                {
                    URL yahoo = new URL("http://www.cosplace.net/photo.php");
                    URLConnection connection = yahoo.openConnection();
                    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

                    while ((inputLine = in.readLine()) != null)
                        buf += inputLine;

                    in.close();
                }
                catch(Exception e)
                {
                    buf = "fail";
                }

                ImageGetter imgGetter = new ImageGetter(){
                    @Override
                    public Drawable getDrawable(String source){
                           try
                           {
                                source = "http://www.cosplace.net/"+source;
                                URL url = new URL(source);

                                InputStream is = url.openStream();
                                Bitmap b = BitmapFactory.decodeStream(is);
                                Drawable d = new BitmapDrawable(getResources(),b);
                                return d;
                           }
                           catch (Exception e)
                           {
                                System.out.println("Exc="+e);
                                return null;
                           }                    
                    }
                };
                Spanned s = Html.fromHtml(buf,imgGetter, null);

                return s;
            }
            catch (Exception e)
            {
                this.exception = e;
                return null;
            }

        }

        protected void onPostExecute(Spanned result) {
            // TODO: check this.exception 
            // TODO: do something with the feed
            TextView txt = (TextView) findViewById(R.id.textView1);
            txt.setText(result);
        }
    }
}

したがって、ImageGetter に移動すると、URL に正常に接続し、データを取得し、ビットマップを作成して描画可能に変換しますが、描画可能を返す直前にジャンプして、例外なしで例外部分の null 行を返します。何が問題なのかわからないだけです。


それを機能させるために管理します。try と catch の近くのコードを再編成しただけで、すべてのメソッドで唯一の return derective になります。そして、setBounds を追加しました。

            Drawable d = null;
               try
               {
                    source = "http://www.cosplace.net/"+source;
                    URL url = new URL(source);
                    InputStream is = url.openStream();
                    Bitmap b = BitmapFactory.decodeStream(is);
                    d = new BitmapDrawable(getResources(),b);
                    d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
               }
               catch (Exception e)
               {
                    System.out.println("Exc="+e);
               }
               return d;
4

1 に答える 1

0

ImageGetterでファイルが見つからないという例外が発生しています catch

java.io.FileNotFoundException: http://www.cosplace.net/http://itodama.net/images/banners/baner4.gif

この行から生成されたリンクにアクセスしてください

source = "http://www.cosplace.net/"+source;

ブラウザで。ブラウザでこのエラーが発生します

Error 404. File not found

ここに画像の説明を入力

于 2013-07-15T03:16:43.617 に答える