dポイントプレゼントキャンペーン実施中!

お世話になっております。

前回

http://oshiete.goo.ne.jp/qa/6829605.html

こちらで質問させて頂き、リストに画像を表示することに成功したのですが、
画像URLが"~~.JPG"(大文字)であったり、画像以外のファイルURLである場合、
エラーが出て強制終了してしまいます。

これを回避するにはどうしたらよいでしょうか。

問題のある画像URLの場合はダミーの画像ファイルを代わりに表示させるか、
なにも表示させないかにしたいです。

どうぞよろしくお願いします。

A 回答 (4件)

ふと思ったのですが。


アクセスするRSSデータは、UTF-8でエンコードされていますか。そのへんの、文字コードによる問題はありませんか。

また、問題の大文字のJPEGファイル名ですが、全角文字が混ざっていたりすることはないでしょうか。あるいは、小文字でアクセスすると表示される、というようなことはないでしょうか。

ParseExceptionでエラーになっているというのは、プログラムの問題というより、元データに問題がある可能性も考えたほうがいいでしょう。
    • good
    • 0
この回答へのお礼

good-failure様

お世話になっております。

あれから色々と調べてみたところ、
やはり元データに問題があったようでした。

毎度毎度ご丁寧にありがとうございます!

お礼日時:2011/07/14 12:11

ちょっとよくわからなくなってきましたね……。



item.getProfileImageUrlで得られる値(URL)はどうなっているのか確認をして、そのアドレスで正しくイメージが取得されるか調べる、ということぐらいしか思いつかないのですが……。

ちょっと思ったのですが、エラーが起こる要素はきまっているのでしょうか。つまり、必ず同じ項目でエラーになりますか。あるいは、XMLの内容がどう変わってもおかしくなるのでしょうか。そのあたりで、どういう値の時にエラーが起こるかを探ってみるしかないと思います。

例えば、大文字で名前が指定されているとエラーになるとか、そういうエラーになる条件を探りだす、ということですね。表示される場合とされない場合の値の違いを調べてみてはいかがでしょう。それぐらいしか今は思いつかないのですが。
    • good
    • 0
この回答へのお礼

good-failure様

毎度、お世話になっております。
エラーが起こる要素はきまっております。

そのエラーが出る画像はJPG(大文字)形式であり、
また、リストでいうと、21項目目に表示されるものです。
パーサーで、20項目目までしか表示されないようにすると、
エラーも出ず、問題ないのですが、21項目目まで表示されるようにすると
エラーが出てしまいます。

しかし、GIF(大文字)の画像ですと、正常に表示されることを確認いたしました。

他の画像も表示されているので、
item.getProfileImageUrlで得られる値は正常に取得できていると思います。

先ほどのお礼にも記載しましたが、
task.execute("エラーの出てしまう画像URL");
だと、リストの画像がすべてエラーの出てしまう画像になりますが、
エラーも出ず、表示されます。

お手を煩わしてしまって申し訳ございません。
またなにか分かれば補足いたします。

お礼日時:2011/07/04 16:51

エラーメッセージというのは、そういうことではなくて、Java仮想マシンで実行時に標準出力に書きだされるコードです。

ひょっとして、デバッグモードで実行したことはないですか? デバッグモードで実行してエラーが起こると、コンソールにエラーメッセージが吐き出されるはずですが……。それを追っていくと、どの部分で例外が発生しているのかわかります。もしやったことがないようなら試してみてください。デバッグは、開発の基本ですので、基本的なやり方は理解しておきましょう。

また、そのコード部分ですが、例外処理というのはわかりませんか? こういうものです。

try {

……ここに実行する処理を書く……

} catch(Exception e){

……ここにエラー時の処理を書く……

}

先ほどのURLからImageViewを生成する部分を、このtry {……}のところにいれて動かしてみてください。このtryの後の{}内に書いた処理でエラーが起こると、そのままcatchにジャンプし、そこでエラーの処理を行うようになります。

この回答への補足

補足です。

さっきまでGIF(大文字)の画像が表示できていましたが、
今確認したところ、表示されなくなっていました。

補足日時:2011/07/04 17:21
    • good
    • 0
この回答へのお礼

good-failuregood-failure様

お世話になっております。
なにからなにまでお手間を取らせてしまい申し訳ございません。

エラーメッセージは以下の通りです。


ERROR/AndroidRuntime(927): Uncaught handler: thread main exiting due to uncaught exception
ERROR/AndroidRuntime(927): java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.co.test/jp.co.test.MainActivity}: java.lang.RuntimeException: org.xmlpull.v1.XmlPullParserException: Error parsing document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 1214, column 49: not well-formed (invalid token)


TwitterAdapterクラスの

ImageView imageView = (ImageView)view.findViewById(R.id.icon);
// バックグラウンドで画像取得
DownloadTask task = new DownloadTask(imageView);
task.execute(item.getProfileImageUrl());



task.execute(item.getProfileImageUrl());を、
task.execute("http://test.jpg");にすると、
リストの画像がすべてhttp://test.jpgになりましたので、


try{
DownloadTask task = new DownloadTask(imageView);
task.execute(item.getProfileImageUrl());
}catch(Exception e){
DownloadTask task = new DownloadTask(imageView);
task.execute("http://test.jpg");
}

としてみましたが、やはり、画像以外のURLが読み込まれるとエラーが出て終了してしまいました。
またなにか勘違いをしているかもしれません。

ためしに、
         task.execute("エラーの出てしまう画像URL");
にすると、エラーの出てしまう画像URLが問題なく表示されました。

お手数をお掛けしますがどうぞよろしくお願いします。

お礼日時:2011/07/04 13:49

>エラーが出て強制終了してしまいます。



このような場合は、発生した例外のメッセージを掲載するように心がけましょう。エラーメッセージは、エラー解決の一番の材料なのですから。

一般的にはですが、インスタンスのが生成できずnullであるために例外が発生しているのだろうと思えます。現在、どのようなコードになっているのかわからないのでなんともいえないのですが、URLからオブジェクトを生成するあたりをtry構文で例外処理を組み込み、例外が起こったらcatch内でダミー画像を表示する処理を用意することになるでしょう。

この回答への補足

ごめんなさい、またレスが途中で切れてしまっていまあした。

思いついたのが、Adapterクラスで

ImageView imageView = (ImageView)view.findViewById(R.id.icon);
// バックグラウンドで画像取得
DownloadTask task = new DownloadTask(imageView);
task.execute(item.getProfileImageUrl());

となっているのを

ImageView imageView = (ImageView)view.findViewById(R.id.icon);
// バックグラウンドで画像取得
DownloadTask task = new DownloadTask(imageView);

if(imageView != null){
task.execute(item.getProfileImageUrl());
}else{
task.execute("https://www.sample.png");

とすることでしたが、上手くいきませんでした。

補足日時:2011/06/30 17:04
    • good
    • 0
この回答へのお礼

good-failure様

いつもお世話になっております。
焦ってしまって、色々と抜けてしまい申し訳ございませんでした。

エラーメッセージは
"Sorry! The application ~ has stopped unexpectedly.Please try again."
です。

コードは

ttp://labs.techfirm.co.jp/android/cho/1079

こちらのサイト様を参考にしております。

お礼日時:2011/06/30 14:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!