FinalBitMapを使用して画像をロードし、urlエラーで他のurlをロードする解決方法
2019 ワード
最近、ネットワーク環境が悪い場合、ピクチャのロードが遅いという問題を解決しました.まず、ローカルのサーバにアクセスしてピクチャを取得し、成功しなければリモートサーバにアクセスすることを考えています.ps:ローカルサーバへのアクセスが速く、ネットワーク環境の影響をほとんど受けません.私は高速開発フレームワークFinalBitMapで画像のロードを実現していますが、どのように実現するかは説明しません.ここではimageViewとurlを1つ伝えるだけで画像のロードを実現することができます.しかし、問題はここで、Afinalフレームワークにはピクチャurlエラー、ピクチャロードエラーのコールバックはありません.だからここは自分で方法を考えなければなりません.
まず自分の考えを話して、後でコードを添付します.コアは,最初のurlが接続できるかどうかを判断し,対応処理を行う.
1、urlが利用可能かどうかを判断する
2、サーバーが接続可能かどうかをチェックする起動戻るurlが利用可能かどうかによって、loadの異なるurl
これにより,サーバの状態に応じて上記の効果を実現できる.
まず自分の考えを話して、後でコードを添付します.コアは,最初のurlが接続できるかどうかを判断し,対応処理を行う.
1、urlが利用可能かどうかを判断する
public boolean checkURL(String url) {
boolean value = false;
try {
HttpURLConnection conn = (HttpURLConnection) new URL(url)
.openConnection();
conn.setConnectTimeout(100);
int code = conn.getResponseCode();
if (code != 200) {
value = false;
} else {
value = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return value;
}
return value;
}
ps:ここで注意しなければならないのは、タイムアウト時間を自分で設定することです.そうしないと、ローカルサーバに接続してデフォルトのタイムアウトを知るまで2、サーバーが接続可能かどうかをチェックする起動戻るurlが利用可能かどうかによって、loadの異なるurl
new Thread(new Runnable() {
@Override
public void run() {
String fasong_img = null;
// TODO Auto-generated method stub
if (checkURL(img_2)) {
fasong_img = img_2;
} else {
fasong_img = imageUrl;
}
Message msg = new Message();
msg.obj = fasong_img;
handler1.sendMessage(msg);
}
}).start();
3、受信メッセージ処理 Handler handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String m_img = (Xinxi) msg.obj;
fb.display(imgeview, m_img);
}
};
これにより,サーバの状態に応じて上記の効果を実現できる.