著者アーカイブ asaba

asaba 著者:asaba

【androidJava】intentでbitmapを遷移させる方法

androidではintent機能を必ずといっていいほど使います。

値を遷移させたりカメラで撮影画面に映ったりなど様々な場面で使うことが出来ます。

今回は画像をintentに持たせて遷移先でやり取りをしたかったのですが!!! FAILED BINDER TRANSACTION !!!というエラーに

ひっかかり見事に怒られてしまいました。

 

どうやらiphoneやandroidで撮影した写真や画像は加工せずに送ると重すぎるためにファイルとして扱うには不適切と見なされ

拒否されてしまうみたいです・・・。

 

少しまわりくどいですが、uriでintentに持たせbitmapに加工するという手段に落ち着きました。

とりあえず遷移先でuriを宣言していればどれだけ重い画像でも持ってこれるので同じような内容でハマっている

方は試してみてください。

 

最後にコードを掲示しておきます。

 

遷移前

<pre>Intent intent = new Intent(this, EditActivity.class);
intent.putExtra("imageUri", uri);
startActivity(intent);</pre>

 

遷移先

<pre>public void getBmp(){
    Intent intent = getIntent();
    Uri uri = intent.getParcelableExtra("imageUri");
    System.out.println(uri);
    try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
        imageView.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
}</pre>

 

遷移先で変数uriに“imageUri”キーを持つ値を持ってきています。

tryの中ではMediaStoreに問い合わせてuriをBitmapに変換しているところです。(ざっくりですみません)

 

asaba 著者:asaba

【cordova-react】長ったるいコードをfor文で解決させた話

前に書いた記事の後付けです。

selectタグを用いて生年月日をプルダウンする機能を実装したのですが、生年月日を全部手書きで書いたためか

エディタの機能やコーディングのスピードが著しく落ち、メンテナンスしにくいコードになってしまいました。

行を無駄に使っているのでスクロールするときもぎこちなくこの状態では効率が悪いと思い、とりあえず

生年月日をループさせてコードの行を減らすことに努めました。

生年月日のデータをreactで書くとこんな感じになります。悪い例 

 

<pre>    this.dayData = [
      {value: '', label: '▼日にち選択'},
      {value: 1, label: '1'},
      {value: 2, label: '2'},
      {value: 3, label: '3'},
      {value: 4, label: '4'},
      {value: 5, label: '5'},
                .
                .
                .</pre>

 

コンストラクタ内でthis.dayDataを初期化しています。

生年月日なので、19××~20××と幅広い西暦を設定しなければいけません。

当然これを直接書くと年齢の幅を考えると100行近くなってしまいますね・・・。

 

短いですがここでシェイプアップのためにrender()内で記述したコードを説明します。

 

//コンストラクタ内

  {value: '', label: '▼日にち選択'},


  //render内
    for(var dayNum = 1930; dayNum <=2030; dayNum++){
    this.dayData[dayNum] = {value: dayNum, label: dayNum};
    }

 

みてくれは通常のjavascriptで連想配列を新しく追加するときのような形式になっています。

これを書いたら後はmapで上のデータを基に新しく配列をつくれば完成です。

asaba 著者:asaba

【cordova-react】reactではclass属性は不適切

一般的にjavaScriptではcssをタグで定義するときはclassというオブジェクトを用いますが、reactでは”class“という属性は

他の予約語で使われている為、これをそのまま使うと他の属性を使ってくれませんかと警告をもらいます。

こんな感じです。↓

 

 

解決方法はシンプルで、classclassNameという名前に変えてあげれば万事解決。

[]javascript]

class="App-circle"

[/javascript]

 


className="App-circle"

エラーではないので重要性は少ないかもしれませんが、メンテナンスの時に煩わしいという方はJSXの仕様が

変わらないうちに直しておくことをお勧めします。

asaba 著者:asaba

【mysql】接続エラーの回数制限を超えてアクセスできなくなったときのメモ

アプリからブログを投稿するアプリで機能のプロトタイプを作っていた時に遭遇しました。

こちら

 


<span style="color: #ff0000; font-size: 14pt;">Host hogehoge.jp' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'</span>

複数回にわたる接続を確認したためブロックされました・・・初見ではなにが原因かさっぱり。

 

リファレンスを見る限り、予め許可する回数が決まっておりその上限を超えると、mysqldは送信元に問題があるとみなしホストがアクセ

スできないように遮断してしまうみたいです。

 

外部からの不正な攻撃を防ぐための対策なので、原因を一本に絞ることができなくて狼狽えましたがとりあえず

クッキーを全削除して再びアプリを使って投稿したところ正常に動きました。

 

正規ではないと思いますが、基本的にはまずクッキーを全部消してみることをお勧めします。

それがだめならブラウザを閉じてchromeを再起動をしてみてください。自分のアカウントを使っている場合はいったんログアウト

してから再度chromeを開いてみてください。

 

asaba 著者:asaba

【react】setectタグで生年月日フォームを作る

ハイブリッドアプリ必須の開発においてはhtml5の知識が必須になりますが、中でもinputタグには誰もがお世話になっていると

思います。そのinputタグのtype(属性)の一つであるdateについて語っていきます。

このdate属性なのですが、ブラウザやデバイスによって表示が変わる仕様になっており、デバイスに至ってはtext扱いに

なってしまい使えない場合があったりと中々癖が強いオブジェクトです。

iosでは、通常のdatepickerのように上下スクロールすることで数字を選べるようになっているのですが、android(特にエクスペリア)

ではカレンダーUIとして表示される仕様になっており、年配な方やせっかちな方にとってはなかなかに見にくい構成に

なっています・・・。

 

アプリの仕様上ユーザー登録画面で生年月日を出力したかったので、一番初めに目にするであろうページでいきなり

イライラさせてしまうことは開発者としては避けたいところ。

これではいけないと思い、date以外にも様々な属性を手探りで使ってみました。(ネタばれですが結果全部不採用w)

 

まず、type=”month”ですがこれは西暦と月はピッカーで表示されるのですが日にちは対象ではないので即対象外。

次にdateTime-localですが、こちらは西暦月日にち三点全部ピッカーとして表示されます。やったネ!と思ったのですが

よく見たら時刻も必ず入力しないといけないんじゃないですかー・・・。

hiddenで非表示にできないか頑張ったのですがダメでしたね、やっぱり入力しないといけないみたいです。

先ほども言った通り生年月日なので産まれた時間まではさすがに求めてないですよ・・・。

しかもIEやfirefoxでは対応していないという仕打ち。

そのほかにも試したのですが、全部撃沈しました。

 

結局selectで生年月日をずらーっと出すようなかたちに落ち着きそうです。

こちらをreactで実装するのは比較的簡単で、まずthis.stateにyear,month,dayをコンストラクタに設定して

mapでそれぞれ西暦月日にちの配列を作ってあげて表示をします。

ただ表示するだけならこれだけでできますが、2018/3/1のように生年月日が連結されたような疑似的にdateで出力される

ような見た目にしたかったのでこんな感じにしました。

<pre>    const year = this.state.year;
    const month = this.state.month;
    const day = this.state.day;
    const birthday = ( year + '/' + month + '/' + day );
</pre>

細かいことを気にしないならば連結するだけならこんな簡単にできてしまいます。

値もしっかりとれているのでandroidでカレンダー表示のUIは嫌だよーというかたは使ってみてくださいね。

 

本日はこんな感じで終了です。よいお年を!

asaba 著者:asaba

自宅のプロバイダを知る方法

自分の使っているプロバイダを変更したい、若しくは知っておきたい時に使えるtipsです。

 

確認の方法はすごく簡単で、自分の登録しているメールアドレスの@の後ろの部分を確認するだけ!です。

例えば、hogehoge@ocn.ne.jpだった場合は、プロバイダーはOCN

foofoo@ybb.ne.jpだった場合はプロバイダーはYahoo!BB

 

簡単に確認することができますね~。

 

すみません、最近はプログラミングと関係ない話題が続きますが、年明けにまたフレッシュなプログラミングの情報を

提供出来たらなと思っています。

 

 

asaba 著者:asaba

【chrome】知っていると得する””の使い方

今日は脱線します・・・!

 

ダブルクォーテーション ”” プログラミングでは主に文字列を扱いたい時に使用しますが、chromeではこいつで検索ワードを

囲むことでその囲った文字に該当するページのみを検索できるようになります。

 

スクショだとこんな感じになります。

 

ダブルクォーテーションで囲む前ですが、検索ワードがバラされて「javaで覚える」というワードを含んだサイトを

拾うことができませんでした。この状態ではお眼鏡に適ったサイトを見つけるのは難しそうです。

 

次は、ダブルクォーテーションで「javaで覚える」を囲った時のスクショです。

 

かなりすっきりしましたねw画像の通りですが、囲った中での文字しか検索されないので目当てのサイトが見つけやすくなったと

思います。

自分はよく○○空白○○でワードを検索していますが、関係ないサイトや意図した内容とは的外れなサイトも一緒に出てきて

しまいいつもめんどくさいなと思っていたのですごく助かりました。

特にプログラミングにおいて検索は必須のツールなので使い慣れればコーディング速度と効率を改善させることができるので

覚えていて損はないと思います。

asaba 著者:asaba

【ios】メールとアーカイブとの違いtips

gmailでアドレスを登録してメールの処理をしている時にどう違うのか疑問に思ったのでメモがてら載せます。

 

アーカイブ:メールを削除しないでトレイから見れなくするだけの機能。見えないけどメール自体は保存されるので

検索をかければ見ることができます。

 

削除:メールをゴミ箱に移動させます。ゴミ箱に移動させたメールは、時間が経つと自動で削除されます。

 

 

アーカイブで非表示にしてもやはり容量は食うので、基本的には削除を使って不要なメールを消していきます。

gmailを使っているとこのアーカイブという機能を見かけますが、残っているのが気持ち悪くて嫌いなので自分は完全に削除

しています。

asaba 著者:asaba

【windows10】起動時にデスクトップが表示されない

windowsを起動してパスワードを入力したらデスクトップが表示されずに画面真っ暗になってしまいました。

その前にダメもとで再起動してみました。

やはり真っ暗の状態で表示されやっぱり長い戦いになるのかぁと俯いて落ちこんでいる間になんか復活していました。

他にもバッテリーを切らしたりタスクマネージャーで検証しながら重いアプリ消したりと解決方法は幾度とありますが

困った時は大正義・再起動ですね。

ウィルスバスターの検証とアプリの更新が同じタイミングで起きて本来最初に立ち上がるはずのシステムが邪魔されて

正常に稼働できなかった時に起きるみたいです。

あと、ビデオカードドライバがアップデートされることでも起きるみたいなので、見かけたら削除して再起動をしましょう。

予防ポイントとしては

 

・使っていないアプリはアンインストールしましょう。

 

・ウィルスバスターは複数入れずにどれか一つに絞りましょう。

 

・もし真っ暗になっても大抵は再起動でなんとかなるとポジティブに考えておきましょう。

 

三点ありますが、上記守るだけで大抵のトラブルを回避できるので頭にいれておくと捗ります。

 

参考にさせていただいたサイト

Windows 10 の画面が真っ暗になった場合のチェックポイントと対処方法

サインイン後の画面が真っ暗な時の修復方法

asaba 著者:asaba

【androidJava】MultipartBodyの使い方

今回は、ギャラリーから画像を取得してOKHttpでファイル名をアップロードすることを目的としたコードです。

 

非同期通信で画像をpost形式で送るには、MultipartBodyオブジェクトを用意します。

画像のurlを取得したりアップロードするときに主に用いられますが、通常使っている

FormBody.Builder()と形式はあまり変わりません。成功時に引数responseの中に画像の名前が格納されます。

試しに20行目のSystem.out.printlnを見れば画像の名前が取得できていると思います。

 

OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("active", "fileUpload")
.addFormDataPart("app0", resultUri.getPath(),
                RequestBody.create(MediaType.parse("image/jpeg"), String.valueOf(resultUri)))
        .build();
Request request = new Request.Builder()
        .url("http://fuga/hoge.php")
        .post(requestBody)
        .build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        System.out.println(response.body().string());
    }
});

一番最初のaddFormDataPartは、画像が送られてきた時にそのurlを返すapiと仮定して書いたので、試す場合はphpなどで

代用するものを作ってください。

どうやって通信前の画像の名前を取得しているかはまた後日に書いていきたいと思います。