タグ

ブックマーク / yuki312.blogspot.com (7)

  • Android: SQLiteDatabaseとコンフリクトアルゴリズム

    SQLiteDatabaseのINSERT/UPDATE文でコンフリクト対応する話 . はじめに SQLiteはデータのコンフリクトを解消するコンフリクトアルゴリズムをサポートしており, CREATE TABLE構文でON CONFLICT句として指定できる. INSERT, UPDATE構文では文体をより自然にするためにON CONFLICTではなくOR句として指定される. Androidでもこれを使うことができる. SQLiteDatabaseクラスを使ってINSERT or UPDATEをする際にコンフリクトアルゴリズムを指定できるメソッドがAPI Lv.8から用意されている. SQL As Understood By SQLite Android Developers - SQLiteDatabase.insertWithOnConflict Android Developers

    kimukou_26
    kimukou_26 2016/04/26
    CONFLICT_REPLACE探してた。
  • Android:JBで追加されたREAD_EXTERNAL_STORAGE

    ●はじめに JellyBeanでREAD_EXTERNAL_STORAGE権限が追加されました。 READ_EXTERNAL_STORAGE権限は外部SDカードの読み込みを制御するものです。 JBにおいて、この権限は将来有効化される"予約された権限"という位置付けです。 (SDカードを読み込むアプリは、将来READ_EXTERNAL_STORAGE権限が必要になるということです) そのため、JBでのREAD_EXTERNAL_STORAGE権限は何の効力も持ちません。 宣言を見ても、テスト用であることがわかります。 <!-- Allows an application to read from external storage --> <permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:pe

    Android:JBで追加されたREAD_EXTERNAL_STORAGE
  • Android:TimingLoggerで処理間隔をログで出力する

    TimingLoggerというクラスがあります。 このクラスを使用すると、処理間隔をわかりやすくログ出力できます。 実際にコードと出力イメージをみたほうが理解できます。 サンプルコード TimingLogger timings = new TimingLogger("tag", "method"); // work a timings.addSplit("work a"); // work b timings.addSplit("work b"); // work c timings.addSplit("work c"); timings.dumpToLog(); ログ D/tag     ( 3459): method: begin D/tag     ( 3315): method:      5 ms, work a D/tag     ( 3315): method:      3

  • Android:キーガードはActivityではなくViewであることの影響

    キーガードはFrameworkが表示しています。 キーガードはActivityではなくViewです。 パワーキー押下でスクリーンOFFするとActivityはonPauseします。 再度パワーキー押下でスクリーンONするとキーガードが表示されます。 一見すると、Activityはキーガードの裏にまわってonPauseしたかのように見えます。 しかし、実際にはスクリーンOFFの影響でActivityはonPauseしています。 続けてスクリーンONするとキーガードが表示された状態になります。 しかし、キーガードはViewなのでスクリーンOFF直前にフォアグラウンドであったActivity のonResumeがキーガードの解除無しに呼ばれます。 これは、フォアグラウンドActivityでも画面上に表示されていないケースの一例です。 (他にもNotificationを引き出している場合やRece

  • Android:CountDownLatchで同期をとる

    Androidに限った話ではありませんが、java.util.concurrentパッケージは同期・非同期 処理を実装する上で便利なクラスが数多くあります。 今回はそんなconcurrentパッケージから、他スレッドでの操作完了を待機する同期支援 クラスのCountDownLatchを使ってみます。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/concurrent/CountDownLatch.html CountDownLatchクラスの主なメソッドはawaitとcountDownです。 CountDownLatchは単純なON/OFFを持ったラッチとして機能します。 awaitを呼び出したスレッドは、countDownを呼び出すスレッドによりラッチが開放される まで待機します。 ラッチの開放にかかるアクション回数はコン

  • Android:Windowsでapkを逆コンパイルする方法

    .apkからソースコードを取り出す方法です。 # バッチの実行コマンドなどは説明を簡略化するためにフルパスで指定しています。 手順1:.apkからclasses.dexを取得 逆コンパイルするには、まずclasses.dexが必要です。 逆コンパイルしたいapkを取得して、zip解凍ソフトで解凍してください。 # よくわからない場合は拡張子をapkからzipに変えてダブルクリックで解凍。 (今回はCドライブ直下に解凍しました) 手順2:dex2jarで.dex→.class変換 手順1で解凍したフォルダの中にclasses.dexがあると思います。 逆コンパイルするにはclasses.dexを.classファイル形式に変換します。 .dex→.class変換にはdex2jarというツールを使います。 dex2jarツールは下記サイトにあります。 http://code.google.com

    Android:Windowsでapkを逆コンパイルする方法
    kimukou_26
    kimukou_26 2012/04/02
    こちらも後で試す
  • Android:SQLiteツールでデータベースを参照する

    SQLiteデータベースの中身をグラフィカルに表示するGUIツールは数多くありますが、 SDKに同梱されているSQLiteツールでも接続が可能です。 直接端末上のデータベースに繋げばリアルタイムでデータを更新できますので、 データベースファイルを端末上からpull→編集→push といった手間が省けてテストの際 には非常に便利です。 ただし、この方法でデータベースを更新してもContentObserver等のDB監視クラスは変更 を検知できずonChangedメソッド等が呼ばれないことに注意してください。 ●SQLiteデータベースへの接続方法 データベースへ接続するにはadb shellモードで # sqlite3 <対象のデータベースファイル> とすれば接続可能です。 実際にブラウザのブックマークデータベースに接続してみます。 C:\android>adb shell root@and

    kimukou_26
    kimukou_26 2012/04/02
    これ知らなかったので後で試す
  • 1