2016年7月15日 星期五

Html-基本認知(二)_標籤、結構、註解

Html 最大的特色在於它的標籤了??

什麼是標籤? ( 開啟瀏覽器後可點擊鍵盤 F12 )
不同的標籤帶有不同元件的特性













標籤是如何宣告、使用?
1) 一律用 "<標籤>" + 內容 + "</標籤>"
2) 標籤內容可再加標籤
3) 大小寫都通用

Html 的最大結構 html、head、body
<html>
    <head>
    .
    .
    .
    </head>
    <body>
    .
    .
    .
    </body>
</html>

Html 的註解
<!-- 這裡寫註解 -->



Html-基本認知(一)_Html、Css、JavaScript是什麼關係?

相信各位大大對標題的不陌生吧
但我還是要提醒我自己
如果有不同見解或解釋有誤的部分
歡迎提出

HTML : 內容的載體( 人 )
CSS : 外觀型態( 衣物、高矮 )
JavaScript : 動作特效( 抬腿、踢球 )

這真的對剛入門的是非常重要的資訊
希望使有幫助的

2016年7月8日 星期五

Android-FireBase 的前置作業_(一)

只要用 FireBase 來開發應用程式
前置作業一定不可少
因為這篇是回頭寫的
如有遺漏請務必告知

首先很重要一點 !!!
不要查到舊版本的 API !
不要查舊版本的 API !
不要查舊版本的 API !
( 舊版 )














( 新版 )














接下來先說明步驟 :
1 . 註冊 Firebase console 專案 ( 請參考 1 - 3 點 )

2 . 下載專案設定檔案( google-services.json)

















3 . 將剛下載的檔案放置專案目錄下























4 . build.gradle 新增
buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

5 . app/build.gradle 新增
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
  // ...
}

dependencies {
  // ...
  compile 'com.google.firebase:firebase-core:9.2.0'
}


以上就是前置的步驟
不管是分析、資料庫、Crash、推播...等才能用。

參考資料 : Add Firebase to your Android Project

Android-Firebase Authentication 認證( Register Account )

更新日期 :
20160827 : 強化說明
20160917 : 更新程式碼

自從 FireBase 開放有關行動開發的功能後
行動裝置開發者就可以專注在 UI 和 UX 的呈現
如果 App 還需要註冊、登入才能使用某些功能
這真的是一大福音
不僅省時又好控管也可以針對資料的存取做篩選

我們話不多說
直接開始進入主題吧
為什麼要有這功能? 用途為?
1 . 讓 FireBase 的 資料庫多一層保護
2 . 會員與非會員資料存取的差異
3 . 運用很廣,請大家集思廣益一起在底下留言

有關此篇的註冊是用一般註冊( 電子郵件、密碼 )
如果想用 Gmail、Facebook...等,官方皆有說明


請先完成 FireBase 的前置作業 : Android-FireBase 的前置作業

1 . 安裝 auth 相關 Lib
build.gradle{
    .
    .
    compile 'com.google.firebase:firebase-auth:9.2.0'
}

2 .  確認 FireBase Console 的註冊 Auth 是否有開啟














如果沒開啟郵件註冊







3 . 確認信的內容,除非要有特定格式,否則建議使用預設














4 . 程式 ( 註冊帳號 )
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity{

    private FirebaseAuth mFirebaseAuth;
    private final String TAG = "Auth";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String email = "email";
        String password = "password";
        
        mFirebaseAuth = FirebaseAuth.getInstance();
        mFirebaseAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful());

                        if (!task.isSuccessful()) {
                            Log.w(TAG, "signInWithEmail:failed", task.getException());
                        }
                    }
                });
    }
}


5 . 如果註冊成功,在 FireBase Console 會出現註冊用戶














參考資料 : Authenticate with Firebase using Password-Based Accounts on Android
參考資料 :  Firebase Authentication

Android-EditText AndroidStudio Glide 問題

最近建立專案後
發現 ExitText 會拋出例外
所以記錄
Process: activity.aaaa.aaa.com.aaa, PID: 9467
java.lang.RuntimeException: Unable to start activity ComponentInfo{activity.aaaa.aaa.com.aaa/activity.aaaa.aaa.com.aaa.ReActivity}: android.view.InflateException: Binary XML file line #29: Error inflating class EditText
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
    at android.app.ActivityThread.access$800(ActivityThread.java:148)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5272)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
 Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class EditText
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at activity.aaaa.aaa.com.aaa.ReActivity.onCreate(RegisterActivity.java:14)
    at android.app.Activity.performCreate(Activity.java:5977)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 
    at android.app.ActivityThread.access$800(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5272) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
 Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v21/abc_edit_text_material.xml from drawable resource ID #0x7f020012
    at android.content.res.Resources.loadDrawableForCookie(Resources.java:2469)
    at android.content.res.Resources.loadDrawable(Resources.java:2371)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
    at android.view.View.<init>(View.java:3737)
    at android.widget.TextView.<init>(TextView.java:676)
    at android.widget.EditText.<init>(EditText.java:65)
    at android.widget.EditText.<init>(EditText.java:61)
    at android.support.v7.widget.AppCompatEditText.<init>(AppCompatEditText.java:60)
    at android.support.v7.widget.AppCompatEditText.<init>(AppCompatEditText.java:56)
    at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:112)
    at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:1008)
    at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1067)
    at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
    at activity.rollcall.brian.com.rollcall.RegisterActivity.onCreate(RegisterActivity.java:14) 
    at android.app.Activity.performCreate(Activity.java:5977) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 
    at android.app.ActivityThread.access$800(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5272) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
 Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #24: <nine-patch> requires a valid 9-patch source image
    at android.graphics.drawable.NinePatchDrawable.updateStateFromTypedArray(NinePatchDrawable.java:445)
    at android.graphics.drawable.NinePatchDrawable.inflate(NinePatchDrawable.java:401)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1095)
    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:185)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1095)
    at android.graphics.drawable.InsetDrawable.inflate(InsetDrawable.java:104)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1095)
    at android.gra

// 如果有更新到最新版本,就會自動生成
// classpath 'com.android.tools.build:gradle:2.2.0-alpha3'
classpath 'com.android.tools.build:gradle:2.1.0'












參考資料 : Android Studio 2.2 preview 1 EditText error

2016年7月4日 星期一

JSP、Servlet-JSP 與 Servlet 結合

為什麼我們不用 Html 就好
則要用 Jsp ??
最主要是我們直接用簡短的程式來完成一大段的功能
有點像是把資料傳給 Jsp 之後收到參數
再把整個頁面轉成 Html 格式

Servlet 3.0 新增使用註解的方式設定
省掉要在 Web.xml 設定的動作
我們直接來說明和操作吧 !


























1 . Index.java
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 網址
@WebServlet("/index")
public class Index extends HttpServlet{

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request
            , HttpServletResponse response)
            throws IOException, ServletException {
        
        // 內容    
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher("/WEB-INF/jsp/index.jsp");
        dispatcher.forward(request, response);
        
    }
 
    public void doPost(HttpServletRequest request
            , HttpServletResponse response)
            throws IOException {
 
    }
    
}

2 . index.jsp
<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>Insert title here</title>
</head>
<body>
    Hello World !!!
</body>
</html>


參考資料 : How to redirect to JSP inside WEB-INF folder
參考資料 : Java EE 6 - Servlet 3.0 新功能 - 注解 (Annotations)
參考資料 : 網頁套版