Type inference failed: Not enough information to infer parameter T in fun <T : View!> findViewById(p0: Int): T! Please specify it explicitly.

今日ひさしぶりにAndroid Studioを開いてみたらビルドエラーが発生

findViewByIdでエラーの模様

Type inference failed: Not enough information to infer parameter T in fun <T : View!> findViewById(p0: Int): T!
Please specify it explicitly. 

kotlinで書いていたが以下のように書き直し

javaでも同様のエラーでるようになったのかな?

view.findViewById(R.id.item)

view.findViewById<View>(R.id.item)

 

キャスト付き

root.findViewById(R.id.text) as TextView

↓ 

root.findViewById<TextView>(R.id.text) 

 

GoogleAppEngineのapp.yaml設定でサブディレクトリにappを置く(python1日目の備忘録)

GAE/py webapp2 

main.pyにすべて処理させるのではなく、サブディレクトリのアクセスはサブディレクトリに配置したpy(app)に処理させたい

 

まずつまづいたのはディレクトリを区切る時に/スラッシュではなくて.ドットで区切る

rootディレクトリ以下の処理

main.py

console以下のアクセス処理

console/main.py

console/sub/以下のアクセス処理

console/sub.py

というファイルがあった時

- url: /console/sub/.*
script: console.sub.app 
login: admin
secure: always

 

- url: /console/.*
script: console.main.app
login: admin
secure: always

 

- url: .*

script: main.app

以上のようになる。がしかしこれだけでは動かず!

console/直下に__init__.pyという空のファイルを置く必要があるみたい

 

console/sub.py

app = webapp2.WSGIApplication([
('/console/sub/list', List),
('/console/sub/item/add', ItemAdd)
], debug=True)

のようにしてルーティングする

 

以下のようになる

main.py 

console/__init__.py

console/main.py

console/sub.py 

- url:

/console/sub/.*
script: console.sub.app 
login: admin
secure: always

 

- url: /console/.*
script: console.main.app
login: admin
secure: always

 

- url: .*

script:

main.app

 

俺なら年賀状の市場規模を10倍にできる

年賀状衰退の意味ってわかってるのかな?

 

昔は近況を知らせるためのツールとしての需要があった。
今となっては紙の無駄だし、もらったら返さないといけない強迫観念、SNSとくらべて手間がかかりすぎる。

SNS以上の価値を提供すれば良いのになぜしないのだろう。
私が郵便局長なら、紙媒体をのこしつつ以下の施策を打つ。


年賀はがきのソーシャル化。
すべての年賀状をウェブ上で閲覧できるようにする。
永遠年賀はがきを保存可能
公開範囲を設定できる。
年始にログイン用アカウント発行用紙を送付
ウェブ上でコメント、および紙媒体の年賀状の返信ができる
翌年からはそのサイト上で年賀状を発行

これなら、スマホでも見れるし、簡単に返信もできる。
そして、その後につなげることができる。

その後とは、ほぼすべての日本人が参加する巨大SNSが一夜にして誕生する。
email,line,messengerでは不可能だった、書留のような重要な書類をやり取りできるプラットフォームを載せる
郵便という文化が進化する

 

MySQLで緯度経度を使う際の備忘録

MySQLで位置情報を扱う

 

緯度 = latitude = Y

経度 = longitude = X

 

//table

CREATE TABLE IF NOT EXISTS `geo_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`geometry` geometry NOT NULL COMMENT 'ジオメトリ',
PRIMARY KEY (`id`),
SPATIAL KEY `geometry` (`geometry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

//insert

INSERT INTO `geo_table` (`geometry`) VALUES (PointFromText('POINT( longitude latitude)');

 

INSERT INTO `geo_table` (`geometry`) VALUES (PointFromText('POINT( x y)');

 

INSERT INTO `geo_table` (`geometry`) VALUES (PointFromText('POINT( 経度 緯度)');

 

//範囲内検索

 SELECT X(geometry) AS longitude , Y(geometry) AS latitude FROM geo_table WHERE MBRWithin( geometry , GeomFromText('LineString(longitudeA latitudeA , longitudeB latitudeB)');

 

緯度経度とYXの関係を間違えないように注意する

 

 

 

 

DrawerLayoutでBackkeyで閉じる処理(失敗例も)

DrawerLayoutでバックボタンで閉じる処理は素直にonBackPressedをOverrideしましょう

 

正解

@Override
public void onBackPressed() {
if (this.mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
this.mDrawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

 

失敗

StackOverFlowにて以下のような書き方を見かけましたが真似しちゃダメです

mDrawerLayout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

 こうすると確かにNavigationViewは閉じるのですが、子ビューにどうやってもフォーカスが当たらなくなり、以下の様なエラーが吐き出されます

 W/TextView: TextView does not support text selection. Action mode cancelled.

 

Android StudioでUnsupported major.minor version 52.0 エラーの解決方法

Android Studioのレイアウトプレビュー画面での以下のエラーを解決する方法

 Rendering Problems

Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupported

major.minor version 52.0 (Detailes)

 

 Java8に変更するかAndroidレンダリングバージョンをN以下に戻します

このことからAndroid N はJava8へ対応するものと思われます

f:id:gandb:20160314203200p:plain