<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>福岡で働くフリーランスエンジニア &#124; kussuue</title>
	<atom:link href="http://kussuue.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kussuue.com</link>
	<description>福岡でスマホアプリ製作、web製作を行っているkussuueのウェブサイトです。</description>
	<lastBuildDate>Thu, 01 Feb 2024 04:44:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>【Android】apt{}書き換えannotationProcessorOptionsの書き方</title>
		<link>http://kussuue.com/2019/06/%e3%80%90android%e3%80%91apt%e6%9b%b8%e3%81%8d%e6%8f%9b%e3%81%88annotationprocessoroptions%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9/</link>
		<comments>http://kussuue.com/2019/06/%e3%80%90android%e3%80%91apt%e6%9b%b8%e3%81%8d%e6%8f%9b%e3%81%88annotationprocessoroptions%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9/#comments</comments>
		<pubDate>Sat, 15 Jun 2019 06:08:58 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[AndroidStudio]]></category>
		<category><![CDATA[annotationProcessor]]></category>
		<category><![CDATA[apt]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1069</guid>
		<description><![CDATA[&#160; annotati..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>annotationProcessorOptionsの書き方</h3>
<p>&nbsp;<br />
&nbsp;<br />
aptがもう使えないのでannotationProcessorに書き換えようとするも、書き換え方がわからなかったので備忘録がわりに記載します。<br />
&nbsp;<br />
&nbsp;<br />
基本的な書き方は<a href="https://bitbucket.org/hvisser/android-apt/wiki/Migration">こちら</a>に載ってます。<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
今回は以下のようにapt{}に記載していた内容をどうすればいいかという内容です。</p>
<p></p><pre class="crayon-plain-tag">apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        resourcePackageName 'com.kussuue.todo'
    }
}</pre><p>以下のようにandroid{}内にjavaCompileOptionsを記載します。</p>
<p></p><pre class="crayon-plain-tag">android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ 'androidManifestFile': 'app/src/main/AndroidManifest.xml'
                        ,resourcePackageName : 'com.kussuue.todo' ]
            }
        }
    }</pre><p>&nbsp;<br />
要素が複数ある場合はカンマで区切ります。<br />
マニフェストファイルの指定はパス指定します。<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>参考サイト</strong><br />
<a href="https://bitbucket.org/hvisser/android-apt/wiki/Migration">https://bitbucket.org/hvisser/android-apt/wiki/Migration</a><br />
<a href="https://codeday.me/jp/qa/20190526/904579.html">https://codeday.me/jp/qa/20190526/904579.html</a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2019/06/%e3%80%90android%e3%80%91apt%e6%9b%b8%e3%81%8d%e6%8f%9b%e3%81%88annotationprocessoroptions%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【WordPress】nginx再起動しても変更が反映しないとき（WordPress、nginx、kusanagi）</title>
		<link>http://kussuue.com/2018/12/%e3%80%90wordpress%e3%80%91nginx%e5%86%8d%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%a6%e3%82%82%e5%a4%89%e6%9b%b4%e3%81%8c%e5%8f%8d%e6%98%a0%e3%81%97%e3%81%aa%e3%81%84%e3%81%a8%e3%81%8d%ef%bc%88wordpress/</link>
		<comments>http://kussuue.com/2018/12/%e3%80%90wordpress%e3%80%91nginx%e5%86%8d%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%a6%e3%82%82%e5%a4%89%e6%9b%b4%e3%81%8c%e5%8f%8d%e6%98%a0%e3%81%97%e3%81%aa%e3%81%84%e3%81%a8%e3%81%8d%ef%bc%88wordpress/#comments</comments>
		<pubDate>Thu, 20 Dec 2018 11:29:45 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[kusanagi]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1037</guid>
		<description><![CDATA[&#160; WordPres..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>WordPress、nginx、kusanagiで変更が反映しないときの解決方法</h3>
<p>&nbsp;<br />
&nbsp;<br />
Wordpressを使用していて、Webサーバーはnginx、仮想マシンはkusanagiを利用しているときに、nginxを再起動してもソースコードの変更が反映しなかったことがある。<br />
これは、kusanagiがキャッシュを持っているためで、手動でキャッシュクリアをしてあげないといけない。</p>
<p>ちなみにkusanagiのキャッシュは２種類あり、bcacheとfcache。<br />
詳しい事は、他の方の良記事などを参考に。</p>
<p>&nbsp;<br />
&nbsp;<br />
<strong>手順</strong><br />
&nbsp;<br />
&nbsp;<br />
<strong> nginxの再起動コマンド</strong><br />
まずはnginxの再起動をします。<br />
&nbsp;<br />
停止：sudo nginx -s stop<br />
起動：sudo service nginx start<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>kusanagiのキャッシュクリアコマンド</strong><br />
&nbsp;<br />
sudo kusanagi bcache clear<br />
sudo kusanagi fcache clear<br />
&nbsp;<br />
&nbsp;<br />
以上です。<br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/12/%e3%80%90wordpress%e3%80%91nginx%e5%86%8d%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%a6%e3%82%82%e5%a4%89%e6%9b%b4%e3%81%8c%e5%8f%8d%e6%98%a0%e3%81%97%e3%81%aa%e3%81%84%e3%81%a8%e3%81%8d%ef%bc%88wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】espressoでUIテスト</title>
		<link>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91espresso%e3%81%a7ui%e3%83%86%e3%82%b9%e3%83%88/</link>
		<comments>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91espresso%e3%81%a7ui%e3%83%86%e3%82%b9%e3%83%88/#comments</comments>
		<pubDate>Wed, 12 Dec 2018 15:33:05 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[AndroidStudio]]></category>
		<category><![CDATA[espresso]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1029</guid>
		<description><![CDATA[&#160; espresso..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>espressoでUIテスト</h3>
<p>&nbsp;<br />
&nbsp;<br />
UI testで使用するespressoのサンプルです。<br />
&nbsp;<br />
アプリ起動時に「Hello World!」を表示し、FABをタップしたらテキストが「Thank you!!!!」と変わるアプリのテストをespressoでおこないました。<br />
&nbsp;<br />
&nbsp;<br />
以下は基本的にAndroid Studioの新規プロジェクト作成時に出てくるテンプレートの中からBasic Activity（だったかな？）をベースにカスタマイズしたものとなります。<br />
<strong>MainActivity</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testespresso;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final TextView textView = findViewById(R.id.textView);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText("Tnank you!!!!");
            }
        });
    }
}</pre><p>※FAB押したらテキストが変わるようにします。<br />
&nbsp;<br />
&nbsp;<br />
<strong>activity_main.xml</strong></p>
<p>デフォルトのまま<br />
&nbsp;<br />
&nbsp;<br />
<strong>content_main.xml</strong></p>
<p></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main"&gt;

    &lt;TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/&gt;

&lt;/android.support.constraint.ConstraintLayout&gt;</pre><p>※TextViewにidを振ります。<br />
&nbsp;<br />
&nbsp;<br />
<strong>ここからテストを実装していきます。</strong><br />
&nbsp;<br />
&nbsp;<br />
<strong>build.gradleを編集</strong></p>
<p></p><pre class="crayon-plain-tag">apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.kussuue.testespresso"
        minSdkVersion 28
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:design:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //Add
    androidTestImplementation 'com.android.support:support-annotations:24.1.1'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'

}</pre><p>※Add以下を追加します。<br />
&nbsp;<br />
&nbsp;<br />
<strong>テストクラス MainActivityTest.java</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testespresso;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    final String HELLO = "Hello World!";
    final String THANKS = "Tnank you!!!!";

    @Rule
    public ActivityTestRule&lt;MainActivity&gt; mainActivityActivityTestRule = new ActivityTestRule&lt;&gt;(MainActivity.class);

    //起動時
    @Test
    public void displayHelloMessage(){
        //Hello World! が表示されていること
        onView(withText(HELLO)).check(matches(isDisplayed()));
    }
    @Test
    public void notDisplayThanksMessage(){
        //Tnank you!!!! が表示されていないこと
        onView(withText(THANKS)).check(doesNotExist());
    }

    //FABクリック
    @Test
    public void notDisplayHelloMessage(){
        //Hello World! が表示されていないこと
        onView(withId(R.id.fab)).perform(click());
        onView(withText(HELLO)).check(doesNotExist());
    }
    @Test
    public void displayThanksMessage(){
        //Tnank you!!!! が表示されていること
        onView(withId(R.id.fab)).perform(click());
        onView(withText(THANKS)).check(matches(isDisplayed()));
    }
}</pre><p>※androidTestフォルダ以下にテストクラスを作ります。<br />
上記Activity内で右クリック→GOTO→TestからもAndroid Studioが自動生成してくれます。</p>
<p>上記テストは、起動時には「Hello World!」が表示されて、「Thank you!!!!」は表示されないよね。<br />
FABタップしたら、「Hello World!」は表示されず、「Thank you!!!!」が表示されるよね。というテストです。<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>テストの実行</strong><br />
Run実行します。<br />
・成功時<br />
<a href="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-13-0.24.59.png"><img src="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-13-0.24.59.png" alt="スクリーンショット 2018-12-13 0.24.59" width="1254" height="460" class="aligncenter size-full wp-image-1030" /></a><br />
４つのテストが成功しています。<br />
&nbsp;<br />
&nbsp;<br />
・失敗時（作成したクラスもしくは、テストクラスに誤りがある場合など）<br />
<a href="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-13-0.26.32.png"><img src="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-13-0.26.32.png" alt="スクリーンショット 2018-12-13 0.26.32" width="1286" height="412" class="aligncenter size-full wp-image-1031" /></a><br />
１つ失敗、３つ成功しています。</p>
<p>&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>参考サイト</strong><br />
<a href="https://qiita.com/fujin/items/df97a97ef80491f16122">https://qiita.com/fujin/items/df97a97ef80491f16122</a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91espresso%e3%81%a7ui%e3%83%86%e3%82%b9%e3%83%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】JUnit4でのunit test</title>
		<link>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91junit4%e3%81%a7%e3%81%aeunit-test/</link>
		<comments>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91junit4%e3%81%a7%e3%81%aeunit-test/#comments</comments>
		<pubDate>Wed, 12 Dec 2018 13:34:59 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[AndroidStudio]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1021</guid>
		<description><![CDATA[&#160; JUnit4での..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>JUnit4でのunit test</h3>
<p>&nbsp;<br />
&nbsp;<br />
unit testで使用するJUnit4のサンプルです。<br />
&nbsp;<br />
Calculatorという計算をおこなうクラスを作り、それが期待した結果を返すかのunit testです。<br />
&nbsp;<br />
&nbsp;<br />
<strong>build.gradleのライブラリ確認</strong></p>
<p></p><pre class="crayon-plain-tag">dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
}</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>Calculatorクラス作成</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testjunit;

public class Calculator {

    public int sum(int a, int b) {
        return a + b;
    }

    public int sub(int a, int b) {
        return a - b;
    }
}</pre><p>※プロジェクト名の先頭にtestと付いているのは、私の手グセです。気にしないでくださいw<br />
&nbsp;<br />
&nbsp;<br />
<strong>テストクラスの作成</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testjunit;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class CalculatorTest {

    private Calculator calculator;

    @Before
    public void setUp() throws Exception {
        calculator = new Calculator();
    }

    @Test
    public void sum() {
        assertEquals(5,calculator.sum(1,4));
    }

    @Test
    public void sub() {
        assertEquals(1,calculator.sub(3,2));
    }
}</pre><p>※テストクラスは上記で作成したクラス内で、クラス名部分で右クリック→GO TO→testからもAndroid Studioが作ってくれます。<br />
&nbsp;<br />
&nbsp;<br />
<strong>テストの実行</strong><br />
Run実行します。<br />
・成功時<br />
<a href="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-12-22.11.07.png"><img src="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-12-22.11.07.png" alt="スクリーンショット 2018-12-12 22.11.07" width="1660" height="456" class="aligncenter size-full wp-image-1023" /></a><br />
&nbsp;<br />
&nbsp;<br />
・失敗時（作成したクラスもしくは、テストクラスに誤りがある場合など）<br />
<a href="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-12-22.12.17.png"><img src="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-12-22.12.17.png" alt="スクリーンショット 2018-12-12 22.12.17" width="1656" height="412" class="aligncenter size-full wp-image-1024" /></a></p>
<p>&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>参考サイト</strong><br />
<a href="https://qiita.com/izuki_y/items/d784529c301af2883b85">https://qiita.com/izuki_y/items/d784529c301af2883b85</a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91junit4%e3%81%a7%e3%81%aeunit-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】Android Architecture Components のViewModel試してみた</title>
		<link>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91android-architecture-components-%e3%81%aeviewmodel%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/</link>
		<comments>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91android-architecture-components-%e3%81%aeviewmodel%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/#comments</comments>
		<pubDate>Sat, 01 Dec 2018 09:15:09 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[and]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1013</guid>
		<description><![CDATA[&#160; Android ..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>Android Architecture Components のViewModel</h3>
<p>&nbsp;<br />
&nbsp;<br />
只今、Android Architecture Componentsを勉強しています。ViewModelを試してみたので、備忘録がわりにメモします。<br />
&nbsp;<br />
以下は、ViewModelの値をチェックして、<br />
<strong>空だったら：テキストをセット→テキストをTextViewにセットする。<br />
それ以外：テキストをTextViewにセットする。</strong><br />
というものです。<br />
&nbsp;</p>
<p>&nbsp;</p>
<p><strong>build.gradleにライブラリ追加</strong></p>
<p></p><pre class="crayon-plain-tag">dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //Add the library.
    implementation "android.arch.lifecycle:extensions:1.1.1"
}</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>ViewModel作成</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testviewmodel;

import android.arch.lifecycle.ViewModel;

public class MainViewModel extends ViewModel {

    private String message = "";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>Activityに反映</strong></p>
<p></p><pre class="crayon-plain-tag">package com.kussuue.testviewmodel;

import android.arch.lifecycle.ViewModelProviders;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ViewModel get the instance via ViewModelProviders.
        MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);

        // Get the TextView reference.
        TextView textView = findViewById(R.id.textView);

        if (mainViewModel.getMessage().isEmpty()){
            mainViewModel.setMessage("Merry Christmas!!");
            textView.setText(mainViewModel.getMessage());

        } else {
            textView.setText(mainViewModel.getMessage());

        }
    }
}</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>activity_main.xml</strong></p>
<p></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"&gt;

    &lt;TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/&gt;

&lt;/android.support.constraint.ConstraintLayout&gt;</pre><p> </p>
<p>&nbsp;<br />
&nbsp;<br />
<a href="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-01-18.13.34.png"><img src="http://kussuue.com/wp-content/uploads/2018/12/スクリーンショット-2018-12-01-18.13.34.png" alt="スクリーンショット 2018-12-01 18.13.34" width="291" height="509" class="aligncenter size-full wp-image-1017" /></a><br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<strong>参考サイト</strong><br />
<a href="https://github.com/googlecodelabs/android-lifecycles/tree/master/app/src/main/java/com/example/android/lifecycles/step2">https://github.com/googlecodelabs/android-lifecycles/tree/master/app/src/main/java/com/example/android/lifecycles/step2</a><br />
<a href="https://lab.sonicmoov.com/development/app-dev/android-architecture-components-viewmodel/">https://lab.sonicmoov.com/development/app-dev/android-architecture-components-viewmodel/</a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/12/%e3%80%90android%e3%80%91android-architecture-components-%e3%81%aeviewmodel%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】DataBindingサンプルプログラム</title>
		<link>http://kussuue.com/2018/11/%e3%80%90android%e3%80%91databinding%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0/</link>
		<comments>http://kussuue.com/2018/11/%e3%80%90android%e3%80%91databinding%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0/#comments</comments>
		<pubDate>Tue, 20 Nov 2018 14:18:56 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[AndroidStudio]]></category>
		<category><![CDATA[DataBinding]]></category>
		<category><![CDATA[MVVM]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=1002</guid>
		<description><![CDATA[&#160; DataBind..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>DataBindingのサンプル</h3>
<p>&nbsp;<br />
&nbsp;<br />
DataBindingを勉強して、シンプルなサンプルを作って動かしたので、備忘録がわりにメモします。<br />
&nbsp;</p>
<p><strong>dataBindingを有効にする</strong><br />
モジュールのbuild.gradle</p><pre class="crayon-plain-tag">android {

・・・（中略）・・・
    dataBinding {
        enabled = true
    }
・・・（中略）・・・
}</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>レイアウトファイルを記載する</strong><br />
activity_main.xml<br />
<strong>※xmlファイルのルートをlayoutタグにする。<br />
※dataタグにバインドするクラスを記載する。<br />
※TextViewタグウィジェットの@{user.name}がdataBindingされる部分。userクラスのnameがバインドされる。</strong></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.kussuue.testdatabinding.MainActivity"&gt;

    &lt;data&gt;
        &lt;!-- Userクラスにバインド--&gt;
        &lt;variable
            name="user"
            type="com.kussuue.testdatabinding.User"/&gt;
    &lt;/data&gt;

    &lt;LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="8dp"&gt;

        &lt;TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"/&gt;

    &lt;/LinearLayout&gt;
&lt;/layout&gt;</pre><p>&nbsp;<br />
&nbsp;<br />
<strong>バインドされるクラスの実装</strong><br />
Userクラス<br />
<strong>※ObservableFieldを使うことで、値に変更があった際にバインド先のレイアウトを変更してくれる。</strong></p><pre class="crayon-plain-tag">package com.kussuue.testdatabinding;

import android.databinding.ObservableField;

public class User {
    public ObservableField&lt;String&gt; name = new ObservableField&lt;&gt;();

    public User(String nameString) {
        name.set(nameString);
    }

}</pre><p>&nbsp;<br />
&nbsp;</p>
<p><strong>MainActivityの実装</strong><br />
MainActivity.java<br />
<strong>※DataBindingUtil.setContentViewメソッドにてBindingオブジェクトを取得する。<br />
※ActivityMainBindingが自動生成される。<br />
※Userインスタンスを設定。<br />
※ActivityMainBindingが自動生成されない（コード内でエラー表示 もしくはビルドの際 not found となった）際は、これまでの設定を見直す。<br />
それでも解決しない場合はAndroidStudio再起動。<br />
すると「import android.databinding.DataBindingUtil;」されるのでエラーが消える もしくはコードを書き直すと解決する。</strong></p><pre class="crayon-plain-tag">package com.kussuue.testdatabinding;

import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.kussuue.testdatabinding.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Bindingオブジェクトを取得
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        // BindingオブジェクトにUserをセット
        binding.setUser(new User("Ichiro"));

    }
}</pre><p><a href="http://kussuue.com/wp-content/uploads/2018/11/スクリーンショット-2018-11-20-23.08.50.png"><img src="http://kussuue.com/wp-content/uploads/2018/11/スクリーンショット-2018-11-20-23.08.50.png" alt="スクリーンショット 2018-11-20 23.08.50" width="246" height="439" class="aligncenter size-full wp-image-1003" /></a></p>
<p>&nbsp;<br />
&nbsp;<br />
<strong>公式ドキュメント</strong><br />
<a href="https://developer.android.com/topic/libraries/data-binding/?hl=ja">https://developer.android.com/topic/libraries/data-binding/?hl=ja</a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/11/%e3%80%90android%e3%80%91databinding%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】画面回転時のActivityの状態保存 onSavedInstanceState</title>
		<link>http://kussuue.com/2018/10/%e3%80%90android%e3%80%91%e7%94%bb%e9%9d%a2%e5%9b%9e%e8%bb%a2%e6%99%82%e3%81%aeactivity%e3%81%ae%e7%8a%b6%e6%85%8b%e4%bf%9d%e5%ad%98-onsavedinstancestate/</link>
		<comments>http://kussuue.com/2018/10/%e3%80%90android%e3%80%91%e7%94%bb%e9%9d%a2%e5%9b%9e%e8%bb%a2%e6%99%82%e3%81%aeactivity%e3%81%ae%e7%8a%b6%e6%85%8b%e4%bf%9d%e5%ad%98-onsavedinstancestate/#comments</comments>
		<pubDate>Wed, 03 Oct 2018 16:27:49 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=994</guid>
		<description><![CDATA[&#160; onSavedI..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>onSavedInstanceStateについて</h3>
<p>&nbsp;<br />
&nbsp;<br />
画面回転時にはActivityが破棄・再生成される。そのため編集中のEditTextの文字がリセットされてしまい、UX的に不便に感じる。<br />
onSavedInstanceStateおよびonRestoreInstanceStateを利用することでActivityの状態保存・復帰ができる。<br />
&nbsp;</p>
<p></p><pre class="crayon-plain-tag">import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText editText;
    private String str;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        str = editText.getText().toString();
        outState.putString("DATA", str);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        str = savedInstanceState.getString("DATA");
    }
}</pre><p> </p>
<p>&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/10/%e3%80%90android%e3%80%91%e7%94%bb%e9%9d%a2%e5%9b%9e%e8%bb%a2%e6%99%82%e3%81%aeactivity%e3%81%ae%e7%8a%b6%e6%85%8b%e4%bf%9d%e5%ad%98-onsavedinstancestate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Studioのショートカット</title>
		<link>http://kussuue.com/2018/10/android-studio%e3%81%ae%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88/</link>
		<comments>http://kussuue.com/2018/10/android-studio%e3%81%ae%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88/#comments</comments>
		<pubDate>Tue, 02 Oct 2018 15:46:20 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[AndroidStudio]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=978</guid>
		<description><![CDATA[&#160; Android ..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3>Android Studioのショートカット集（自分用）</h3>
<p>&nbsp;<br />
&nbsp;<br />
AndroidStudioで使えるショートカットを記載。沢山あり覚えられないので使いそうなものを少しだけメモ記載。<br />
&nbsp;<br />
使用OS: Mac<br />
使用Ver: AndroidStudio3.1.4<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・Find Action</h4>
<p></strong><br />
AndroidStudioのほぼ全ての機能にアクセスできる。<br />
例）show linenumber<br />
<strong>command + shift + a</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・型補完</h4>
<p></strong>型の補完をしてくれる。引数の入力の補完。<br />
例）Toast.makeTextで引数の補完をしてくれる<br />
<strong>control + shift + space</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・エラーの修正 Quick Fix</h4>
<p></strong>エラーの修正をおこなってくれる<br />
例）import文の追加<br />
<strong>Alt + Enter</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・現在の文の仕上げ</h4>
<p></strong>if文とかで{}などをいい感じに入力してくれる<br />
例）if文<br />
<strong>shift + command + Enter</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・引数の表示</h4>
<p></strong>メソッドの引数を表示してくれる<br />
例）Toast.makeTextで引数を表示してくれる<br />
<strong>command + p</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・すべてから検索</h4>
<p></strong>メソッド名やファイル名などをすべてから検索できる<br />
例）<br />
<strong>Shift + Shift</strong><br />
</code><br />
&nbsp;<br />
<code><br />
<strong><br />
<h4>・宣言を開く</h4>
<p></strong>メソッドの宣言を開く<br />
例）<br />
<strong>Command + b</strong><br />
</code><br />
&nbsp;<br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/10/android-studio%e3%81%ae%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】SQLiteデータベースの中身を確認する</title>
		<link>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91sqlite%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e4%b8%ad%e8%ba%ab%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b/</link>
		<comments>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91sqlite%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e4%b8%ad%e8%ba%ab%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Fri, 14 Sep 2018 06:48:28 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[sqlite3]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[adb]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=967</guid>
		<description><![CDATA[&#160; SQLiteデー..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h4>SQLiteデータベースの中身をadbで確認する</h4>
<p>&nbsp;<br />
自分用メモ<br />
&nbsp;<br />
&nbsp;<br />
ターミナルからadb shellで端末のデータベースへ接続し、中身を確認する</p>
<p>&nbsp;<br />
&nbsp;<br />
<strong>・ターミナル起動</strong><br />
&nbsp;<br />
<strong>・SDK Locationに移動する</strong><br />
例）<br />
$cd /Users/kussuue/Library/Android/sdk<br />
&nbsp;<br />
<strong>・adb shell起動</strong><br />
$cd platform-tools/<br />
$ ./adb shell<br />
&nbsp;<br />
<strong>・データベースに移動</strong><br />
#cd /data/data/PACKAGEID/databases<br />
&nbsp;<br />
<strong>・中身を見る</strong><br />
ls<br />
&nbsp;<br />
<strong>・データを見る</strong><br />
sqlite3 yourapp.db<br />
&nbsp;<br />
.tables<br />
.schema TABLENAME<br />
select * from TABLENAME;<br />
&nbsp;<br />
<strong>・終了する</strong><br />
.exit<br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91sqlite%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e4%b8%ad%e8%ba%ab%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【Android】簡単なリストビュー作成</title>
		<link>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91%e7%b0%a1%e5%8d%98%e3%81%aa%e3%83%aa%e3%82%b9%e3%83%88%e3%83%93%e3%83%a5%e3%83%bc%e4%bd%9c%e6%88%90/</link>
		<comments>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91%e7%b0%a1%e5%8d%98%e3%81%aa%e3%83%aa%e3%82%b9%e3%83%88%e3%83%93%e3%83%a5%e3%83%bc%e4%bd%9c%e6%88%90/#comments</comments>
		<pubDate>Fri, 14 Sep 2018 04:47:26 +0000</pubDate>
		<dc:creator><![CDATA[takaaki]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Techブログ]]></category>
		<category><![CDATA[listview]]></category>

		<guid isPermaLink="false">http://kussuue.com/?p=962</guid>
		<description><![CDATA[&#160; 簡単なリストビュ..]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h4>簡単なリストビュー作成のソースコード</h4>
<p>&nbsp;<br />
自分用メモ<br />
&nbsp;<br />
&nbsp;<br />
Androidのsimple_list_itemを使った簡単なリストビュー作成の方法<br />
&nbsp;<br />
&nbsp;</p>
<p></p><pre class="crayon-plain-tag">import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List&lt;Map&lt;String, String &gt;&gt; items = new ArrayList&lt;Map&lt;String, String&gt;&gt;();

        //Data
        Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
        map.put("key1", "title");
        map.put("key2", "subtitle");
        items.add(map);

        //Adapter
        String[] from = {"key1", "key2"};
        int[] to = {android.R.id.text1, android.R.id.text2};    //simple_list_item2.xml内のTextViewのidを指定
        SimpleAdapter adapter = new SimpleAdapter(this, items, android.R.layout.simple_list_item_2, from, to);

        //Set adapter to ListView.
        final ListView listView = (ListView)findViewById(R.id.listview);
        listView.setAdapter(adapter);

    }
}</pre><p> </p>
<p>&nbsp;</p>
<p></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"&gt;

    &lt;ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/&gt;

&lt;/LinearLayout&gt;</pre><p> </p>
<p>&nbsp;<br />
<a href="http://kussuue.com/wp-content/uploads/2018/09/スクリーンショット-2018-09-14-13.36.46.png"><img src="http://kussuue.com/wp-content/uploads/2018/09/スクリーンショット-2018-09-14-13.36.46.png" alt="スクリーンショット 2018-09-14 13.36.46" width="255" height="412" class="aligncenter size-full wp-image-963" /></a><br />
&nbsp;<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kussuue.com/2018/09/%e3%80%90android%e3%80%91%e7%b0%a1%e5%8d%98%e3%81%aa%e3%83%aa%e3%82%b9%e3%83%88%e3%83%93%e3%83%a5%e3%83%bc%e4%bd%9c%e6%88%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
