2010年5月アーカイブ

機能の改善と追加です。

 

改善点

・フォントサイズを16sp→20spへ

・設定を設定ファイルに持つように改善

 

追加点

・間違えたときに震えるように追加

・間違えたときに震えるのON/OFFを設定に追加

 

以上です。

かなり苦戦しました。
苦肉の策的な感じでとりあえず実装はできたので良い方法が
見つかるまでこれでしのぎます。

やりたかったこと
・画面A、画面B、設定画面Cがある。
 設定画面Cで設定したPreferenceがある、こちらに対して画面Aでボタンを押した
 際にPreferenceの設定を変更し、画面Bに遷移する。

実際にやってみて
・画面Aでボタンを押したときにPreferenceに書き込むだけだしすぐできるだろう
 と思っていたらぜんぜんうまくいかない。

画面A:TestAct.java
画面B:CopyOfTestAct.java
設定画面C:PreferenceTest.java

・失敗した例
---- TestAct.java
public class TestAct extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button)findViewById(R.id.Button01);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                PreferenceTest pt = new PreferenceTest();
                pt.setItem("item01");
            }
        });
    }
}

---- PreferenceTest.java
public class PreferenceTest extends PreferenceActivity {
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.test);
    }
   
    public void setItem(String value){
        SharedPreferences spf = getPreferenceManager().getSharedPreferences();     ←①
        Editor e = spf.edit();
        e.putString(getString(R.string.key), value).commit();
    }
}
①でエラーが発生、NullPointerException
どうやら「PreferenceActivity」のActivityがActiveでないとNullPointerExceptionに
なってしまうのかな?

 


・成功した例
---- TestAct.java
public class TestAct extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button)findViewById(R.id.Button01);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), PreferenceTest.class);
                intent.putExtra("key", "item01");
                startActivity(intent);
            }
        });
    }
}

---- PreferenceTest.java
public class PreferenceTest extends PreferenceActivity {
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.test);
    }
   
    @Override
    protected void onStart() {
        super.onStart();

        Bundle extras = getIntent().getExtras();
        String value = extras.getString("key");
       
        if(value != null){
            this.setItem(value);
        }

        Intent intent = new Intent(getApplicationContext(), CopyOfTestAct.class);
        startActivity(intent);
        finish();
    }
   
    public void setItem(String value){
        SharedPreferences spf = getPreferenceManager().getSharedPreferences();
        Editor e = spf.edit();
        e.putString(getString(R.string.key), value).commit();
    }
}

一応無事にエラーもなく書き換え完了です。
ただちょっと姑息な手段ぽくもみえるのでもっと適切なやりかたがきっとあるに違いない。

 

AndroidのMediaPlayerでエラーが発生。

 

中身は

Attempt to perform seekTo in wrong state: mPlayer=0x1e4b60, mCurrentState=64

 

どうやらSingletonでMediaPlayerを使用しているのが原因らしい。

ダメな例から良い例にしたら正常に動きました。

 

ダメな例

MediaPlayer mp = null;

protected void onPreExecute() {
   super.onPreExecute();

   if(mp instanceof MediaPlayer){}

   else{

      mp = MediaPlayer.create(timerActivity.getApplicationContext(), R.raw.alarm);

    }

}

 

良い例

MediaPlayer mp = null;

protected void onPreExecute() {
   super.onPreExecute();

   mp = MediaPlayer.create(timerActivity.getApplicationContext(), R.raw.alarm);

}

 

参考サイト

http://2dkonly.blog10.fc2.com/blog-category-6.html

 

Androidでなにができるか色々しらべていたら、デモがあることがわかりました。

 

{Android SDKのインストール先}.\android-sdk\platforms\android-1.6\samples\ApiDemos

 

これをエミュレータで動かしてみたら大体なにができるかざっくり調べられました。

今までは結構苦労した気がする。

ちゃんとデモはみないともったいないことにいまさら気付かされました。。。。

AndroidのR.javaが突然読み込みできなくなってしまったことが
あり、その解決方法を忘れないためメモしておきます。

 

結論から言うと
「import android.R;」
がimportされていたためプロジェクトで作成したリソースが使用できなく
なっていたのが原因でした。

 

「import android.R;」を削除したら正常にリソースが使用できる用に
なりました。

 

CheckBoxPreferenceの初期値がONつまりtrueへのやり方にちょっと
戸惑ったのでメモしておきます。

<CheckBoxPreference
 android:key="@string/xxxkey"
 android:title="@string/xxxtitle"
 android:defaultValue="true">
</CheckBoxPreference>

android:key:
 ON/OFF(true/false)を取得するときに使用するキー

android:title:
 タイトルを表示するときに使用する

android:defaultValue:
 {パッケージ名}_preferences.xmlが存在しない場合の初期値

ちなみに{パッケージ名}_preferences.xmlファイルが存在するのは
 /data/data/{パッケージ名}/shared_prefs/
になります。

ちょっとしたバグがあったので修正しました。

・DBまわりで不要な例外が発生しないように修正
・ランキングタブのpxで指定されている箇所が存在したた、dipに修正
・クリアタイムが15.400などの場合に15.4になってみづらいため15.400になるように修正

以上です。



Android内のSQLiteにてテーブルが存在しているときにはテーブルを作成しない

方法が何かないか調べていたらSQLで実現可能だったのでメモしておきます。

 

■テーブル作成時に存在しない場合のみ作成
create table if not exists テーブル名 (カラム1, カラム2, カラム3)

 

■テーブル削除時に存在する場合のみ削除
drop talbe if exists テーブル名 (カラム1, カラム2, カラム3)

 

以上です。

ちょっと仕事に余裕がでたので修正しました。


変更履歴(V1.0.11)
・むずかしいタブからむずかしいモードになるように修正
・一部画面を見やすく修正
・数字ボタンのサイズを変更52dip -> 58dip

以上です。

このアーカイブについて

このページには、2010年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年4月です。

次のアーカイブは2010年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.27-ja