2017年12月30日 星期六

Java-切割、分割字串

想必各位大大對這需求一定不陌生吧
在此紀錄下來
希望大家一起分享一起交流

切割字串解析成每個字元
1 . 方法一
String s = "abcd,efgh";
System.out.println("Use String method : Char Array");
char[] a = s.toCharArray();
for (char c : a) {
    System.out.println(c);
}

Use String method : Char Array
a
b
c
d
,
e
f
g
h

2 . 方法二
String s = "abcd,efgh";
System.out.println("Use String method : String length and char At");
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    System.out.println(c);
}

Use String method : String length and char At
a
b
c
d
,
e
f
g
h

藉由特定的字串切割( Split )
1 . 字串切割
String s = "abcd,efgh";
System.out.println("Use String method : Split");
String[] strs = s.split(",");
for(String str: strs) {
    System.out.println(str);
}

Use String method : Split
abcd
efgh

2 .字串切割,但限制條件
String s = "abcd,efgh,ijkl,mnop,qrst";
System.out.println("Use String method : Split limit");
for (String retval : s.split(",", 3)) {
    System.out.println(retval);
}

Use String method : Split limit
abcd
efgh
ijkl,mnop,qrst

歡迎轉載,請註明出處。




2017年12月26日 星期二

Java-網頁憑證轉為 JKS 格式

1 . 命令提示字元目標移至 C:/.../jdk/bin
2 . 將下載好後的 *.cer 憑證放置此路徑下
3 . 更改以下指令檔案名稱並且執行
keytool -importcert -file <changedCertName>.cer -keystore <exportName>.jks -alias changeit
4 . 產生出來的 jks 會產生再此路徑底下

2017年12月12日 星期二

Android-手機震動(Vibrator)

可能在特定情境下
開發者要讓使用者知道狀態
有時會採用音效、震動模式
讓使用者知道是有觸發的
目前採用 Kotlin 語法,會與 Java 有稍許不同

在此先來記錄
以便之後用的到

思路:
1 . 手機權限存取
2 . 取得對應服務
3 . 設定震動參數

實作開始
1 . 手機權限存取
<uses-permission android:name="android.permission.VIBRATE" />

2 . 取得手機對應服務
var myVibrator = application.getSystemService(Service.VIBRATOR_SERVICE) as Vibrator;

3 . 設定手機震動參數
if (Build.VERSION.SDK_INT >= 26) {
    myVibrator?.vibrate(VibrationEffect.createOneShot(100, 10));
} else {
    myVibrator?.vibrate(100);
}

Source Code
import android.app.Service
import android.os.Build
import android.os.Bundle
import android.os.VibrationEffect
import android.os.Vibrator
import android.support.v7.app.AppCompatActivity
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity(), View.OnClickListener {

    private lateinit var myVibrator1: Vibrator;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        myVibrator1 = application.getSystemService(Service.VIBRATOR_SERVICE) as Vibrator;

        constraintCounterBackground.setOnClickListener(this);

    }

    override fun onClick(view: View) {
        when (view?.id) {
            R.id.constraintCounterBackground -> {
                println("item found");
                if (Build.VERSION.SDK_INT >= 26) {
                    myVibrator1?.vibrate(VibrationEffect.createOneShot(100, 10));
                } else {
                    myVibrator1?.vibrate(100);
                }
                var intCounterNum = (textCounterNum.text.toString()).toInt();
                textCounterNum.setText((intCounterNum + 1).toString());
            }
            else -> {
                println("item not found");
            }
        }
    }

}



參考資料:
Android-Vibrator
Android學習筆記 - 震動(Vibrator)
Android vibrate is deprecated. How to use VibrationEffect in Android>= API 26?

2017年12月10日 星期日

Android-Kotlin 監聽元件錯誤

近期用 Kotlin 開發 Android 時
會發現非常奇怪的錯誤會發生
通常是在匯入 interface 的時候
比如 View.OnClickListener...等
在此記下
以便於之後查閱

1 . 程式碼在此
package com.xxx.xxx.xxx.xxx

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        linearLayout.setOnClickListener(this);

    }

    override fun onClick(view: View) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        when (view?.id) {
            R.id.linearLayout -> {
                println("found");
            }
            else -> println("item not found");
        }

    }

}


2 . 導致錯誤...
Process: com.xxx.xxx.xxx.xxx, PID: 8563
kotlin.NotImplementedError: An operation is not implemented: not implemented
    at com.xxx.xxx.xxx.xxx.MainActivity.onClick(MainActivity.kt:19)
    at android.view.View.performClick(View.java:5637)
    at android.view.View$PerformClick.run(View.java:22429)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

解法:

去除預設的 TODO("not implemented")
結果程式終於能夠正常執行了

簡單的說法
提醒你要記得實作
但是在 Kotlin 下 TODO 是會起阻擋提醒作用的

參考資料 :
 [Kotlin]kotlin.NotImplementedError: An operation is not implemented: not implemented
NotImplementedError

2017年12月2日 星期六

Android-Logger 和 Log4j 的使用與差異

注意:目前 Log4j 有一些尚未完成,敬請見諒。

此篇語法為 Kotlin,宣告方法類似 Java ,只是順序不同

大家在開發程式的過程中
想必可能要了解或者是要更清楚流向
會用到 System.out.println、Logger、Log4j
此篇用談到如何在 AndroidStudio 用 Java Logger 和 Log4j

1 . 一般 Java Logger 方法
package com.light.blue.log.activity

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import java.util.logging.Level.*
import java.util.logging.Logger

class MainActivity : AppCompatActivity() {

    private val logger: Logger? = Logger.getLogger("MainActivity");

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // SEVERE   嚴重(特高級別)
        // WARNING  注意
        // INFO     訊息

        logger?.info("info message");
        logger?.log(SEVERE, "Server message");
        logger?.log(WARNING, "WARNING message");
        logger?.log(INFO, "INFO message");
        
    }
}