幸福なプログラマ

プログラマは幸福になれる。

Vagrant upでのエラー

Vagrant upしたときに

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

上記のようなエラーが発生することがある。 これは、ホスト側のVirtual BoxのバージョンとBoxにゲスト側にインストールされているVirtualBox Guest Additionのバージョンが異なるため発生している場合があり、vagrant-vbguestを実行することで解決できるようです。

まずはvagrant-vbguestのインストール

vagrant plugin install vagrant-vbguest

vbguest実行

vagrant vbguest

これでvagrant upしてもエラーが出なくなるはず。

Picassoでエラーの詳細を取得する

Picassoでエラー発生時のコールバックを取得するとき

Picasso.with(context).load(URL).into(ImageView, new Callback() {
        @Override
        public void onSuccess() {
        }

        @Override
        public void onError() {
        }
});

こんな感じに書くことができるけど、これだとエラーの詳細を取得することができない。

以下のようにbuilderにlistenerを設定することでStackTraceなりResponseCodeなり、エラーの詳細を取得することができる。

Picasso.Builder builder = new Picasso.Builder(context);
builder.listener(new Picasso.Listener() {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
        }
});
builder.build().load(URL).into(ImageView);

Android Studioでドキュメントが自動的にポップアップしないようにする。

マウスカーソルが当たっているコードのドキュメントが勝手にポップアップするやつ、イライラするから消したい。

Preferences
f:id:javabayashi:20160709024313p:plain

Editor>General>Code Complete内のAutopopup documentation in (ms)のチェックを外す
f:id:javabayashi:20160709024425p:plain

平穏。

ユーザ切り替えインテントを取得する

Android 5.0(lollipop)からマルチユーザに対応しました。(タブレットは4.2から)
ユーザ切り替えが発生した際のインテントの取得したい場合、以下のように記述します。

class UserSwitchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // ユーザ切り替え時の処理
    }
}

/**
 * ユーザ切り替え時のレシーバ登録
 */
void registerReceiver() {
    IntentFilter intentFilter = new IntentFilter();
    // ユーザがバックグラウンドになった際のインテント登録
    intentFilter.addAction(Intent.ACTION_USER_BACKGROUND);
    // ユーザがフォアグラウンドになった際のインテント登録
    intentFilter.addAction(Intent.ACTION_USER_FOREGROUND);

    registerReceiver(new UserSwitchReceiver(), intentFilter);
}   

ユーザが切り替わった際にActivityを止めたい時なんかは、上記UserSwitchReceiveronReceivefinish()すればいいはず。

gitでリモートからブランチをチェックアウトするまでの流れ

空のディレクトリで始める手順です。

  1. 初期化
    git init

  2. リモート名を指定してリモートリポジトリにアクセスできるよう設定
    git remote add リモート名 リモートリポジトリのurl

  3. リモートリポジトリの変更を取得
    git fetch

  4. ローカルブランチを作成してリモートリポジトリの任意のブランチをチェックアウト
    git checkout -b ローカルブランチ名 リモート名/remoteリポジトリのブランチ名

  5. チェックアウトできたことを確認
    git branch -a

ViewのVisibleが変化した際に起動するイベントリスナを作る。

1.イベントリスナをセットしたいViewを継承した独自Viewクラスを作成する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
}

2.イベントリスナのインタフェース・メンバ変数・セットメソッドを定義する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
    
    private OnVisibilityChangeListener mOnVisibilityChangeListener;
    public interface OnVisibilityChangeListener {
        public void onVisibilityChange(int visiblity);
    }
    public void setOnVisibilityChangeListener(OnVisibilityChangeListener listener) {
        mOnVisibilityChangeListener = listener;
    }
}

3.setVisiblityメソッドをオーバーライドしてVisibleの変化に呼応してイベントが発生するように実装する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
    
    private OnVisibilityChangeListener mOnVisibilityChangeListener;
    public interface OnVisibilityChangeListener {
        public void onVisibilityChange(int visiblity);
    }
    public void setOnVisibilityChangeListener(OnVisibilityChangeListener listener) {
        mOnVisibilityChangeListener = listener;
    }
    
    @Override
    public void setVisibility(int visibility) {
        super.setVisibility(visibility);
        if (mOnVisibilityChangeListener != null) {
            mOnVisibilityChangeListener.onVisibilityChange(visibility);
        }
    }
}

これで対象のViewの表示・非表示が切り替わるたびに発生させたい処理を定義することができます。
 
ちなみに以下のように実装します。

mMyTextView.setOnVisibilityChangeListener(new MyTextView.OnVisibilityChangeListener() {
    @Override
    public void onVisibilityChange(int visiblity) {
        if (View.VISIBLE == visiblity) {
            
        } else if (View.INVISIBLE == visiblity) {
        
        } else if (View.GONE == visiblity) {
        
        }
    }
};

Android StudioでBreakpointの一覧表示

Android Studioで、設置したBreakpointの一覧を確認したい場合
ctrl+shift+F8
で以下のような子画面が表示されるので、そこで一覧表示・削除・設置等を行うことができる。
Breakpoints