ねこトラッカー

2014/06/23 12:57:36
梅雨終わってなかた。

Noranekoです。



ということで、以前『GPS TRACKER』を作ったんですが、

ちょっと前に知り合いから、

「これってわざわざブラウザでアクセスしなきゃいけないの?」

と聞かれました。

あれの目的はオフラインでトラッキングをして、PCのブラウザ上で見ることでした。

しかし自分も使ってみて、やっぱりリアルタイムにトラッキングを見たいなぁと思っていて、

ちょっと調べてみたところ、



Google Maps Android API v2



なる物を発見!

しかも以前使ってた、Google Maps API?と違ってリクエスト制限とか全くなし!

素晴らしいですね。


と言いますか、弊猫はAndroid専門でやってますが以前書いた通り、

自分がこんなん欲しいなぁと思った時に作る、日曜大工的アプリしか作っていませ>ん。

なので、AndroidのSDKとかAPIの仕様変更とか全く疎いです。

で上記の『Google Maps Android API v2』ですが、

https://console.developers.google.com/

より登録できます。

と言いますか、登録しないと使えません!


ログインして入ると、作った覚えのない『API Project』というのがあり、



こんな風になっています。

ここで、自分の使いたいAPIを有効にして使う感じですね。

また、左の

APIS & AUTH > 認証情報

でアプリのキーを管理します。


ということで、Android上で完結する



ねこトラッカー



を作りました。

Android2.3.4、512MBの実機でストレスなく動いてます。

Googleの地図に関するAPIはほんと優秀ですね。

あとテストして思ったのですが、このAPIは電波掴まないとこでも大丈夫ぽい?ので、

GPSが傍受できていれば、『ねこトラッカー』でトラッキング情報は記録できます。



これに伴い、『GPS TRACKER』のサービスは終了します。

今後は『ねこトラッカー』に機能を追加していく予定です!

1個つけたい機能があるんですが、仕様がちょっと入り組んじゃうので、

時間がかかりそうでござる...

夏前にできればいいかな?




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

ListViewのお話 Vol.2

2014/05/12 15:04:22
消費税が上がっていくらになるかわからなくなったので、


ねこに小判を作りました。


数字を打ち込んでエンター押していくだけで簡単に合計がわかります。

また、『便乗値上げチェッカー』を搭載してるので、

便乗値上げしてる店を発見したら店長を呼び出し、

どういうことなのか、小一時間問い詰めることができるでしょう。



それでは以前のListViewのお話です。

ListViewで一件だけ削除は問題ないというとこまで話をしましたが、

ある条件の物を削除するということをした際に問題が発生しました。

for文でindexを使いremoveする時は、
ListView lv;
// アダプターを取得する
OrenoAdapter adpter = (OrenoAdapter)lv.getAdapter();
if(adpter != null){
 final int max = adp.items.size() - 1;
 // ぐるぐるする
 for(int i = max; i >= 0; i--){
  // itemを取得
  OrenoClass ore = adp.items.get(i);
  if(ore != null){
   // 削除する条件
   if(ore.id == 99){
    adp.remove(s);
   }
  }
 }
 adp.notifyDataSetChanged();
}


という感じにしましょう!

removeをすると、どうやら構造体が上に詰まる(正しい表現がわからん^ω^)ので、

indexの最大値から0まで逆に回せばおk!

0から回してて、消えてないアイテムがあったり、範囲外エラー出てたりちょっと悩まされてた。

謎が解ければなんてことないです。

あとオブジェクトを取り出した後はnullチェックしましょう。

nullチェックしないプログラマはプログラマにあらずです!


つかadpterを取り出した後に、foreachで回した方がよくね?

と思いやってみましたが、

java.util.ConcurrentModificationException

が発生します^ω^

結局removeをやることで、構造体が変わるのでけつから消せってことですね。




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

Android SDKがおかしぃ。。。

2014/05/06 20:18:56
GWも終わりじゃないですかーやだー!

てことで、ちょっと自分の為に作りたいアプリがあったので

Eclipseで新規プロジェクトで作ろうとしたんだけど、固まりすぎワロタwww












...








いやちょっとワロエないかも...









前回のListViewの続きを書きたかったけど、また今度にします。




86対応エミュとかでSDKをアップデートした結果、

『Android SDK Tools 22.6.3』

ていうのが今入ってて、ちょっと調べた感じだと、

Action Barって言う謎の物体が下位のversionでも使用できるようになって、

Android 4.0(API14)未満に対応しようとすると、変なライブラリをインストールするようになりました。

なのでAndroid 4.0未満に対応しなければ良い話なんだけど

私のAndroidが2.3.3なので、作るアプリは基本2.3以上対応なんですよ。




つうことで今回はエラーでまくりでなんもできなくなった!!

ぷんぷん丸プログラマーの皆様に私なりの対処法を伝授します。

本来なら一子相伝ですが、GW最終日なので全員に教えちゃいます!



まず、この変なライブラリをインストールする為に、

Android SDK Manager -> Extras -> Android Support Library

が必要になるので、インストールしておきます。



ここで注意が必要なのですが

これをインストールした時に、昔からAndroidを開発してた人は

SDK\extras\android\compatibility\v7\appcompat

となっている可能性が高いです。

私がそうでした。

上記のパスになってる人は、

一回アンインストールして、もう一度インストールし直しましょう。

SDK\extras\android\support\v7

になっていれば大丈夫です。


それでは、2.3対応のプロジェクトを作ってみましょう

File -> New -> New Android Application

ここのMinimum Required SDKを

『API 9:Android 2.3(Gingerbread)』

にします。

Action Barはいらないので、Themeは『Holo light』辺りで。



Nextを押して行って、Create Activityで

Empty Actibityを選択します。



Activity Name等を決めてFinishを押します。

そうすると、

WARNING: unable to write jarlist cache file ***\appcompat_v7\bin\jarlist.cache

が出て、応答なしになる可能性がかなり高いです。

右上の×を押してEclipseを閉じましょう。

たまに普通にプロジェクトができる時もありますが、ほぼ応答なしです。

閉じたら開きます。


そうすると、プロジェクトディレクトリ(ここでは『Test』とします。)と

『appcompat_v7』 ディレクトリができています。

しかし、強制終了したので『appcompat_v7』が開けないので

右クリックをして、『Open Project』を選択しましょう。

そうすることによって、

『appcompat_v7』と『Test』に赤い×がつきます。

次に『appcompat_v7』をまた右クリックして、『Build Project』を選択します。

多分赤い×が消えます。

そしたら『Test』を同様に右クリックして、『Build Project』を選択します。

これで『Test』の赤い×が消えます。

もし『Test』の方の赤い×が消えていない場合は、

Eclipseを再起動してもう一度『Build Project』を選択してみて下さい。

何回かやれば消えると思われます。

と言うように、私の環境では結構ひどいことになっております。

しかも同じような条件の新規プロジェクトを作ると、

『appcompat_v7_2』、『appcompat_v7_3』と同じ物が作られてしまいます!










これはひどい^^;








一個あれば大丈夫なので、プロジェクトを右クリックして

Properties -> Android -> Library



から『appcompat_v7_*』を選択して『Remove』、

『Add』を押して既存の『appcompat_v7』を選択して、

その下にある『Apply』を押して一番下の『OK』を押します。

最後に『appcompat_v7_*』を削除しましょう。



今までLibraryの仕様が変わったりしましたが、

プロジェクトを作った際に自動でLibraryを追加するということが弊害になっています。

ブログとか見てると、ダウングレードしてる人とかもいますね...


しかもこういう仕様なので、最初に4.0をターゲットにして

後から2.3もターゲットにするとエラーが出まくってコンパイルできません。

なので現在の最新のSDKで何か作ろうと思ってる方は、

下位互換をするかどうかちゃんと決めないと泣きを見ることになるでしょう。



そんなこんなで、Android開発環境を作り直さないといけないかもしれない^ω^#




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

ListViewのお話

2014/04/26 01:32:17
GW始まったで~!


それに伴い、Studio nekoでもセール始めてみました^ω^

Google Play ストア見てみてね。


今までのアプリも今月はちょこちょこ更新いれて、

多少は使いやすくしたりとかしてるので試してみてちょんまげ。


ということで、今回はねこったぁを作ってる際に???となったので、

それについてのまとめというか、久々にAndroidのお話をしたいと思います。




まずAndroidのListViewとはなんぞや?




上の画像の赤枠で囲まれたのがListViewという物です。

iPhoneなんかが出てきてよく見かけるようになってると思いますが、

AndroidではListViewと呼びます。

iOSではなんて呼ぶか知らん。

そんで、ListViewを表示するための中身を配列で作ります。

つまりListViewにint型、String型と別の型同士を入れることはできません。

一つの型だけです!!




















多分。


通常は独自の型をclass化して使いますね。

それでこの中身をAdapterと言います。























多分。









それでは、簡単なロジックを見てみましょう。
ListView lv = new ListView(this);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, Strings);
adapter.add = "おまえは";
adapter.add = "もう";
adapter.add = "死んでんねんで!";
lv.setAdapter(adapter);




これだけです。

簡単ですね。


しかしListViewで『ねこったぁ』の様に情報をイロイロ表示しようとすると、

ArrayAdapterをextendした独自のアダプタに独自の構造体を作らなければいけません。

ListView lv = new ListView(this);
ArrayList<OrenoClass> list = new ArrayList<OrenoClass>();
// 中略
for(OrenoClass o : orenoclasses){
 list.add();
}
OrenoAdapter adapter = new OrenoAdapter(this, R.layout.ore, list);
lv.setAdapter(adapter);

public class OrenoAdapter extends ArrayAdapter<OrenoClass>{
 // 中略
}

public class OrenoClass{
 // 中略
}



といった感じになります。


まぁここまでは小学生でも知ってることなので、ListViewから削除したい!

今回はこれについて熱く語りたかったので、筆を執りました。

ListViewのある部分を消す場合には、adapterを取り出し操作することでできます。

OrenoClass ore; // 消したいオブジェクトとする
ListView lv;
// アダプターを取得する
OrenoAdapter adpter = (OrenoAdapter)lv.getAdapter();
// 消す
adpter.remove(ore);
adpter.notifyDataSetChanged();



実にシンプルでわかりやすいですね。



でもある機能を入れた時にその事件は起こったんだ...




まさかあんなことになるなんて...
































ドス!!

























目の前にはただ赤


ぼくの喉からあふれ出す血の赤


最後に思ったのは、一人残った真理はどうするのだろう、ということだった


死体の山の中でただ一人


ぼくは真理が可哀想になった


……真理……











~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

Twitterクライアントを作りましょう Vol.2

2013/11/30 19:20:29
SurfacePro2欲しい。Noranekoです。


やっぱスペックとか見てると重さ以外はSurfacePro2が圧倒的!

しかも256GBの法人モデルだと10万切り!

オフィス持ってるから、一般販売しろよ!



ということで、前回の続きです。

Studio nekoでは、アプリはAndroidのみ作成してますので、

Twitter4jとAndroidについてのみ、ご説明致します!


前回は、アプリ登録・Twitter4jのダウンロードまでご説明したので、

次はプロジェクトのlibsに

twitter4j-core-3.0.3.jar

を入れましょう。

カメラや撮った画像等を使ったりしたい場合は、

twitter4j-media-support-3.0.3.jar

も入れておきましょう!

ここまでくれば、99%完成です!!

あとは1%の才能が必要です。

努力とかそういうのは一切いりません。

むしろ努力するっていうのは、センスがないわけなので、

プログラマには向いていません。


次にTwitter4jというかTwitter APIについて。

getHomeTimeline()等のメインとなるメソッドには、

Pagingという任意のページを指定する引数を用いることができます。

そんで、ページ番号と1ページ内件数をPagingにして用いてましたが、

戻り値の件数が1ページ内件数より少ないということが多々あったので、
Paging p = new Paging(i, cnt);
↓
Paging p = new Paging();
p.setMaxId(id);


とし、最後に取得したid(long)を用いてページングしました。

次のページを取得した際に、最初の1件目が前ページの最後と同じなので、

ResponseListからremove(0)にします。

また、空判別にisEmpty()を使いましょう。

followingを取得するgetFriendsList()の方のメソッドは、

戻り値がPagableResponseListの為、

次ページの判別はhasNext()で判別して、

getNextCursor()でidを取得できるので簡単です。


最後にAndroidについて

AndroidManifest.xmlで、

<uses-sdk 
 android:minSdkVersion="9"
 android:targetSdkVersion="15"
/>


とすると、Android Device Chooserで、

バージョンの低いAVDは指定できませんが、

実機には×が付きますが、インストールが可能になります。

で、その時にしか判別しない不具合がありました。

独自アダプタにaddallすると落ちる。

と言う物でした。

public class HogeAdapter extends ArrayAdapter<hoge>{

}


と、ListViewを使う人なら独自アダプタを作ることはしょっちゅうあると思いますが、

これに対して、2.3.4でaddallするとそんな関数ねえよ!で落ちていました。

なので、下位対応するならaddallは使わず


for(hoge h :data){
 adpt.add(h);
}


と言うように、ぐるぐるしてあげましょう。


そんなわけで、今まで作ってたTwitterクライアントを一新しました。



ねこったぁをリリースしました。


いろんな機能というか、自分が必要な機能を追加しました。

使ってみてね☆




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android
1 2 3 4 5 6 
BLOG内検索
<< 2018/11 >>
Sun Mon Tue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30