とある社畜(♀)のダイエット記録~プログラミングもあるよ~

新米SEのレコーディングダイエットの変遷、料理、プログラミング備忘録な雑多ブログです。

プログラミング技術メモ の記事一覧

スポンサーサイト

--.--.-- (--)  スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ListFragment内のアイテムがタップできなかった件

2015.06.03 (Wed)  Android
ListFragmentを継承して作ったfragmentで生成したアイテムを、クリックしたときに呼ばれるはずのメソッドが全然呼ばれず、半日潰したのが解決されたのでメモ。

結論としてはonListItemClickをオーバーライドすべし。ということだった。
ずーっとonCreateViewメソッドの中で

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
     ~うんちゃら
    }

と書いてlistViewからリスナーを呼ぼうとしていたんだけど駄目だった。。
多分これActivityで作る場合の方法で、ろくに確認もせずどこかからコピペしてきたのだろうと思われます。
ListFragmentで作る場合はonListItemClickじゃないと多分駄目?なのかな?まだ齧り始めたばかりなのでよく分かっておりません
ひとまず何とかなりそうだー!


なお今このへんまでできてます



前と!変わってない!!
項目のタップは無事に出来るようになりましたが綺麗にシステムエラーに突入するのでデバッグなう


ランキング参加中!
よろしければぽちっとお願い致します↓(´∀`*)




スポンサーサイト

自作アプリ進展!

2015.05.26 (Tue)  Android
こんばんは。
今日は更新しないつもりだったのですが1個進展したのでご報告。誰も待ってねぇ

今こんな感じになりましたウエッヘッヘヒャ

すいません三日詰んでたところがやっとクリアできたので気持ち悪い笑いがウエッヘッヘヒャ

詰んでたところっていうのが、スクロールできるタブを作るのと、あとは単純に画面にリストを出すだけのことだったのですが、非常に単純なハマり方をしておりました。メソッドの使い方間違えてたっていうだけね
ちなみに悪の教典以外のデータは私の大学時代の小説のタイトルです。評価ランクのテストしようと思ったので、低い評価付けるなら自作小説しかねえなと///
悪の教典は文句なしの星5ですまた読み返してるくらいです(読了から一ヶ月も経ってない)

それでは明日お仕事の方のリリースで早いのでそろそろ寝ますね(´°ω°)ノシ


ランキング参加中!
よろしければぽちっとお願い致します↓(´∀`*)




greenDAO入門の和訳

2015.05.18 (Mon)  Android
greenDAOの学習を兼ねて、ひとまずgreenDAO公式サイトのHow to get startedを和訳してみました。
英語に愛されない才能に恵まれたので、ほぼGoogle先生頼り&意訳混じりです。間違ってるところあったら教えてください。
公式サイト⇒http://greendao-orm.com/

和訳ここから↓


■greenDAOの始め方

このチュートリアルでは、greenDAOの使い方について、簡単なサンプルプロジェクトを使って説明していきます。
サンプルはhttps://github.com/greenrobot/greenDAOからダウンロード可能です。
なお、このプロジェクトは「DaoExample」と「DaoExampleGenerator」の二つのサブプロジェクトで構成されています。
GitHubからプロジェクトをクローンで取得、またはGitHub上で直接ファイルを閲覧することもできます。

チェックアウトしたDaoExampleは、Androidアプリケーションとして実行可能です。メモを取るためのシンプルなアプリとなっています。
文字を入力することで新しいノートを追加したり、既存のノートを押下することでノートを削除することが可能です。


・生成されたコードと、テーブルの作成について

src-genフォルダには、既にいくつか生成されたコードが入っています。

1)Note.java⇒ノートの要素を記述したクラス。
2)NoteDao.java⇒ノートオブジェクトを扱うインターフェイスとなるDAOクラス。

DaoExampleGeneratorを使えばこうしたNoteクラスやNoteDaoクラスはいつでも生成できますが、ひとまずはDaoExampleについて見ていきましょう。
DaoExample内のDaoMasterクラスを使うと、簡単にSQLiteOpenHelperを取得することが出来ます。



new DaoMaster.DevOpenHelper(this, "notes-db", null)



処理をgreenDAOが自動的に行ってくれるので、「CREATE TABLE」をする必要はありません。


・ノートの挿入および削除

ノート用のテーブルがあれば、ノートをデータベースに登録することが出来ます。
この処理はNoteActivityクラスで行われており、onCreateメソッドでDAOオブジェクトを準備します。



daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();




次にaddNoteメソッドを見てみましょう。
データベースに新しいノートを追加するにはこのように書きます。



Note note = new Note(null, noteText, comment, new Date());
noteDao.insert(note);
Log.d("DaoExample", "Inserted new note, ID: " + note.getId());




Javaオブジェクトを作成し、DAOのinsertを呼び出すだけです。
insert処理後にログで確認できる通り、今追加されたノートにはデータベースIDが既に割り当てられています。

ノートの削除も簡単です。onListItemClickメソッドを見てみましょう。



noteDao.deleteByKey(id);



ここでは割愛しますが、loadAllやupdateなどの他のメソッドもあります。


・データモデルとコードの作成について

メモを拡張したり、新しいエンティティを作成したりするには、DaoExampleGeneratorを見る必要があります。
DaoExampleGeneratorには、データモデルの定義を記載したクラスが置いてあります。



Schema schema = new Schema(1, "de.greenrobot.daoexample");
Entity note = schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");




ここでエンティティ追加用のスキーマオブジェクトを作成します。
エンティティには、データベースの列にマップされているプロパティを記載します。
スキーマの定義が完了したらコードの自動生成を行うことが出来ます。Note.javaとNoteDao.javaはこの方法で生成されたものです。


・次の一歩

さて、greenDAOについてどのように感じたでしょうか。是非、自分で色々試してみてください。
使い方については、こちらのマニュアルも参照してください。マニュアルを見ても解決しない問題があればサポートオプションをご利用ください。



和訳ここまで↑

なんとなく概念が分かってきたような段階です。
でもまだAndroidStudioに投入出来てすらいないっていう駄目っぷり。エラーの波にもまれている。せめて動かしたいのでもう少し頑張ります


ランキング参加中!
よろしければぽちっとお願い致します↓(´∀`*)




strutsで文字化け地獄

2013.04.13 (Sat)  Struts_ハマったこと
【文字化け地獄】

もう…こいつには何度泣かされたことでしょう…
jspからサーブレットに日本語を送れば文字化け。DBからとってきた値をjspに表示させれば文字化け。なぜそこまで別の何かに化けたいのか。お前らには自分と言う確固たる芯が無いのかと問いたい。小一時間問い詰めたい。
とりあえず対処法をいくつか書いてみますね。


~画面からサーブレットに日本語を送る場合~


1.jspに文字エンコードの指定をする

jspの頭にこんなのを追加する。

<%@ page contentType="text/html; charset=UTF-8"%>

jsp自体の文字コードをUTF-8にするよ!と言う指定です。
ただこれ、サーブレットを経由しないjspに書くと逆に文字化けしたりとか、訳の分からん動きが時々ありました。
組み合わせによっては不味いことになるのだろうか。
これが書いてあるのに文字化けする!と言うときは逆に取っ払ってみるのも一つの手です。


2.jspに、リクエストを送信する際の文字エンコードの指定をする

jspにこんなのを追加する。

<% request.setCharacterEncoding("UTF-8"); %>

リクエストパラメータに入れる値をUTF-8で送るよ!という指定です。
私の場合はこれだけで上手くいったことはありません。なんでだろう環境の問題?


3.受け取り側で好きなようにエンコードしてしまう

例えばActionFormに入ってきた値が文字化けしてしまうなら、ActionForm内に文字コード変換メソッドを入れてあげます。
↓こんな感じ。



    /**
     * 文字列をUTF-8に変換して返します
     *
     * @param str
     */
    public String toUTF8(String str) {
        String reStr = null;
        try {
            reStr = new String(str.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return reStr;

    }




↓上記メソッドの呼び出し部分はこんな感じ。
ゲッターに設定してあげます。



    /**
     * ユーザー名を取得します。
     *
     * @return String ユーザー名
     */
    public String getUserName(){
        if(this.userName!= null){
            return toUTF8(this.userName);
        }
        return this.userName;
    }



↓もちろん普通にActionに書いて変換しても。



    String name = req.getParameter("name");

    try {
        name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }



ただ便利だからと言って必要の無いところ、例えばDBからの値をjspに送るためのbeanなんかに書くと逆に文字化けしました。
DBの文字コードと合ってなかったのかなー?ご利用は計画的に。


4.フィルターを使う

一番楽かもしれません。かつ強力。
ちょっと設定が多いので面倒に感じるかもしれませんが、これ一個設定しておけば同じプロジェクト内で作る限り後なんにも心配しなくて良い気がします。
ちなみに動的アクションフォーム(ダイナアクションフォーム)を使用する場合はformクラスをつくらないので3の方法が使えないため、バリデーションで弾かれた後actionを経由せずに文字コードの設定をしたいとなると、必然的にフィルター機能を使わざるを得ないと思います。

・tomcatをC直下に入れていた場合、
C:\tomcat\6.0\webapps\examples\WEB-INF\classes\filters
というパスが存在するはずです。
filtersフォルダの中にSetCharacterEncodingFilter.javaとSetCharacterEncodingFilter.classがあることを確認してください。

・上記二つのファイルを、ワークスペース内の/WEB-INF/classes以下の同名フォルダにコピーします。
デフォルトでは存在しないはずなので、自分でフォルダを作って放り込みます。
(例)
C:\pleiades\workspace\StrutsSumple\WEB-INF\classes\filters

・web.xmlに追記を行います。



<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">


<web-app>
~中略~
    <filter>
        <!-- ↓フィルターの名前を設定 -->
        <filter-name>EncodeFilter</filter-name>
        <!-- ↓上記で放り込んだフィルタークラスのパス -->
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <!-- ↓フィルタークラスのフィールドの初期化。この場合はUTF-8でエンコーディングさせる設定 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <!-- ↓使いたいフィルターの名前と一致させる -->
        <filter-name>EncodeFilter</filter-name>
        <!-- ↓どのURLを呼んだときに上記フィルタを起動させるか設定。この場合は全てのURLに対してフィルタを使う -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
~中略~
</web-app>



※J2EEが2.3以降でないと、どうやら<filter>タグは使えないようです。

<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
↑ここがちゃんと2.3以降になっているか確認してください。

ちなみに私は
<!DOCTYPE web-app   
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"   
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">   
この状態で作業してて、<web-app>のコンテンツにフィルターなんてねぇよ!!と怒られてました。ご注意を。


※web.xmlをいじるとこんなエラーが出るかもしれません

The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".

または

要素タイプ "web-app" のコンテンツは "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)" と一致しなければなりません。


これは、カッコ内のコンテンツタイプの順番と、実際にweb.xmlに記載されているコンテンツの順番が違うというエラーです。
例えば<servlet>の下に<filter>を置いていたりとか。
エラー文言の通りの記述順に合わせてあげてください。
(ちなみに上記コンテンツタイプを全部記述する必要は無く、あくまで順番どおりに記述すれば良いのです)


これでtomcatを起動させれば、自動的にフィルタがかかってくれる……はず!


jspが表示されない!

2013.03.23 (Sat)  Struts_ハマったこと
【jspが表示されない】
strutsは設定ファイル地獄と言われるほどstruts.configの設定が面倒くさいです。今回はそんな設定に関するエラー。

Actionからjspに遷移するところで、jspがないよーとtomcatに怒られてしまいました。
調べてみたところ、struts.configの記述をミスっていた模様。



 <action-mappings>
  <action
   path="/SumpleAction"
   type="test.question_2.action.SumpleAction"
   name="SumpleForm"
   scope="request"
   validate="false">
   <forward name="Sumple.jsp" path="jsp.question_2.Sumple.jsp">最後にスラッシュが無い!
  </action>
 </action-mappings>



スラッシュが無いだけじゃなく、<action type>の記述に引きずられて、パスの記述を.(ドット)区切りにしていたことも原因でした。
Actionはパッケージに入っているからドット区切り。jspは普通にフォルダの中に入っているからスラッシュ区切りでおk。

↓修正!



 <action-mappings>
  <action
   path="/SumpleAction"
   type="test.question_2.action.SumpleAction"
   name="SumpleForm"
   scope="request"
   validate="false">
   <forward name="BookList.jsp" path="/jsp/question_2/Sumple.jsp" />
  </action>
 </action-mappings>



きちんと認識してくれるようになりましたー!

 | HOME |  Next »
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。