SUGARSPOT

Androidアプリ、WEBサービス開発の SUGARSPOT  |Androidブログ「Androidのことなんだけど」もやってます

2011年11月21日月曜日

[Android]HttpClientでサイズの大きい画像が取得できない場合

サイズが大きいといっても1MBや2MBといった話しではなく数百キロByteの場合でもHttpResponseのcontentから取得できたInputStreamをBitmapFactoryに流し込んでもエラーとなる事がある

--- decoder->decode returned false


こんな感じにね

そんな時は、BufferedHttpEntityを使いましょう
実際のコードを以下に。(画像のURLは適当です)


HttpUriRequest httpRequest = new HttpGet("http://hogehoge.com/sample.jpg");
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(httpRequest);
HttpEntity httpEntity = httpResponse.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(httpEntity);
Bitmap image = BitmapFactory.decodeStream(bufHttpEntity.getContent());

2011年11月8日火曜日

[Android] BeanをIntentにセットできるようにParcelableにする

よく忘れるので自分用にメモ

必要なこと
  1. Parcelableを実装したクラスにする( implements Parcelable)
  2. Parcelable.Createrを実装したCREATERというstaticな変数を用意する
  3. Parcelを引数にとるコンストラクタを用意する
  4. writeToParcelで登録する順番と、上に書いたコンストラクタで読み出す順番を同じにする
実際に書いてみると


import android.os.Parcel;
import android.os.Parcelable;

public class Employ implements Parcelable {

    public int id;
    public String name;
    public int age;
    public String address;

    public Employ() {
    }

    private Employ(Parcel in) {
        id = in.readInt();
        name = in.readString();
        age = in.readInt();
        address = in.readString();
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeString(address);
    }


    public static final Parcelable.Creator<Employ> CREATOR = new Parcelable.Creator<Employ>() {
        public EmploycreateFromParcel(Parcel in) {
            return new Employ(in);
        }

        public Employ[] newArray(int size) {
            return new Employ[size];
        }
    };
}



[Android]EditTextのカーソルを左上にする

よく忘れるので自分用にメモ。

EditTextのgravityを指定するだけ

    <EditText
      android:id="@+id/memo"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:height="100dip"
      android:gravity="top|left"/>

2011年11月3日木曜日

BinaryNumber BatteryWidgetをバージョンアップ

ずっと前から気にはしていたのですが、海外ユーザーさんからメールを貰って修正する気力が沸いてきて、ようやく修正しました

メールを貰ったのは9/20で、気力が沸いたのがついさっきです


問題だったのは、バッテリーウィジェットがバッテリーの残量が変化するのを監視しているの訳ですが、この監視するサービスが強制停止されてしまうと、その後でバッテリーが変化しても表示が変わらないという問題

で、これを解決する方法はネットを探すと色々と情報が出てきます

やった事は2つ

1)AndroidManifest.xmlのintent-filterに以下を追加

<action android:name="android.intent.action.USER_PRESENT" />

これは、ユーザーがスリープ状態から復帰するのを通知して貰う為に追加

2)そして、その通知を受けたら監視を再開するようにBroadcastReceiverのonReceiveに処理を追加

if (action.equals(Intent.ACTION_USER_PRESENT)) {
    Intent forceUpIntent = new Intent(context,
        BatteryWidget.UpdateService.class);
    context.startService(forceUpIntent);
}

たったそれだけ

これで使いやすく?なった BinaryNumber BatteryWidgetを、どうぞご利用ください(一部のマニア向けですが・・・)



http://sugarspot.net/android_app/bnbw.html