Artificial Intelligence Programming Lab(AIPLab) 討論區

Please login or register.

請輸入帳號, 密碼以及預計登入時間

新聞:

[開學]106學年第1學期的課程看版開張了 歡迎同學問問題-20170917

作者 主題: [App Client 2] 預約掛號  (閱讀 3204 次)

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1873
    • 檢視個人資料
[App Client 2] 預約掛號
« 於: 十二月 18, 2014, 08:57:29 pm »
[App Client 2] 預約掛號-使用Android Studio
//復習
(1) 請先完成上週的 [Web Client 2] 看診進度步驟
(2) 開啟Android Studio, 打開模擬器(AVDM)
//Start a new Android Studio project 建立Android專案
(4) 在Android Studio建立一個新的Android專案MyC2App
(5) 找到AVD manager,建立一個小的AVD(3.2" QVGA 320x480)
在模擬器中看App的執行
« 最後編輯時間: 十二月 24, 2014, 03:15:57 pm 由 admin »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1873
    • 檢視個人資料
回覆: [App Client 2] 預約掛號
« 回覆文章 #1 於: 十二月 24, 2014, 03:17:16 pm »
//建立UI包括layout和string
======
( 6 ) 打開 /res/layout/activity_main.xml
( 7 ) 修改 activity_main.xml
程式碼: [Select]
<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:text="@string/app_title"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="10dp"
        android:text="@string/today_doctor"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <DigitalClock
        android:id="@+id/digitalClock1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="10dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView1"
        android:layout_alignTop="@+id/digitalClock1"
        android:text="@string/today_doctor_dummy"
        android:textAppearance="?android:attr/textAppearanceMedium" />
   
    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/digitalClock1"
        android:layout_below="@+id/digitalClock1"
        android:layout_marginTop="54dp"
        android:text="@string/app_subtitle1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView6"
        android:layout_below="@+id/textView6"
        android:layout_marginTop="10dp"
        android:text="@string/to_register"
        android:onClick="showRegisterActivity" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/button1"
        android:onClick="showQueryActivity"
        android:text="@string/to_query" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView6"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="15dp"
        android:text="@string/today_order_dummy"
        android:textAppearance="?android:attr/textAppearanceMedium" />
( 8 ) 打開 res/values/strings.xml
( 9 ) 編輯
程式碼: [Select]
<string name="app_name">AsiaClinic</string>
    <string name="app_title">模擬診所的行動App</string>
    <string name="today_doctor">AU Clinic本日醫生:</string>
    <string name="today_doctor_dummy">xxx</string>
    <string name="today_order">目前看診:</string>
    <string name="today_order_dummy">xxx</string>
    <string name="app_subtitle1">模擬診所-看診進度</string>
    <string name="app_subtitle2">模擬診所-預約掛號</string>
    <string name="app_subtitle3">模擬診所-查詢掛號</string>
    <string name="app_func1">目前看診順序</string>
    <string name="app_func2">預約掛號</string>
    <string name="app_func3">查詢掛號</string>
    <string name="place_holder">xxxx</string>
    <string name="to_register">預約掛號</string>
    <string name="to_query">查詢掛號</string>
    <string name="to_order">看診進度</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_register">RegisterActivity</string>
    <string name="hello_world">Hello world!</string>
    <string name="title_activity_query">QueryActivity</string>
    <string name="title_activity_reg_result">RegResultActivity</string>
   
    <string name="radio_1">星期一</string>
    <string name="radio_2">星期二</string>
    <string name="radio_3">星期三</string>
    <string name="radio_4">星期四</string>
    <string name="radio_5">星期五</string>
    <string name="radio_6">星期六</string>
    <string name="radio_7">星期日</string>
    <string name="label_id">身份證號碼</string>
    <string name="label_name">病人姓名</string>
    <string name="label_submit">送出預約</string>
    <string name="label_submit2">送出查詢</string>
    <string name="patient_id">X111222333</string>
    <string name="patient_name">王小明</string>
   
    <string name="query_result_dummy">查詢結果</string>
    <string name="connection_error">Connection error.</string>
(10) 在manifest/AndroidManifest.xml插入網路權限
程式碼: [Select]
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
« 最後編輯時間: 十二月 25, 2014, 06:40:51 am 由 admin »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1873
    • 檢視個人資料
回覆: [App Client 2] 查詢掛號
« 回覆文章 #2 於: 十二月 25, 2014, 06:18:35 am »
(11) 新增二個Activities: RegisterActivity, RegResultActivity
app->New->Activity->Blank Activity

(12) 修改res/layout/activity_register.xml
程式碼: [Select]
<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_1" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_2" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_3" />
       
        <RadioButton
            android:id="@+id/radio3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_4" />

        <RadioButton
            android:id="@+id/radio4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_5" />

        <RadioButton
            android:id="@+id/radio5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_6" />
       
        <RadioButton
            android:id="@+id/radio6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onRadioButtonClicked"
            android:text="@string/radio_7" />
       
    </RadioGroup>

     <Button
         android:id="@+id/button1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editText2"
         android:layout_below="@+id/editText2"
         android:text="@string/label_submit"
         android:onClick="submitRegisterActivity" />

     <EditText
         android:id="@+id/editText2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/textView3"
         android:layout_below="@+id/textView3"
         android:ems="10"
         android:inputType="none"
         android:text="@string/patient_name" />

     <TextView
         android:id="@+id/textView3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editText1"
         android:layout_below="@+id/editText1"
         android:layout_marginTop="15dp"
         android:text="@string/label_name" />

     <EditText
         android:id="@+id/editText1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/textView2"
         android:layout_below="@+id/textView2"
         android:ems="10"
         android:inputType="text|textCapCharacters"
         android:text="@string/patient_id" >

         <requestFocus />
     </EditText>

     <TextView
         android:id="@+id/textView6"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/radioGroup1"
         android:layout_below="@+id/radioGroup1"
         android:text="@string/app_subtitle2"
         android:textAppearance="?android:attr/textAppearanceLarge" />

     <Button
         android:id="@+id/button2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/textView6"
         android:layout_below="@+id/textView6"
         android:onClick="showOrderActivity"
         android:text="@string/to_order" />

     <Button
         android:id="@+id/button3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/button2"
         android:onClick="showQueryActivity"
         android:text="@string/to_query" />

     <TextView
         android:id="@+id/textView2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignTop="@+id/radioGroup1"
         android:layout_marginRight="60dp"
         android:text="@string/label_id" />
(13) 修改res/layout/activity_reg_result.xml
程式碼: [Select]
<TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/app_subtitle2"
        android:textAppearance="?android:attr/textAppearanceLarge" />
   
    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView6"
        android:layout_below="@+id/textView6"
        android:text="@string/to_order"
        android:onClick="showOrderActivity" />

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignLeft="@+id/button3"
        android:layout_below="@+id/textView1" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/webView1"
        android:layout_below="@+id/button3"
        android:layout_marginTop="20dp"
        android:text="@string/app_title"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView1"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/button3"
        android:text="@string/to_query"
        android:onClick="showQueryActivity"/>
(14) 在MainActivity.java
程式碼: [Select]
public void showRegisterActivity(View view) {
        // Do something in response to button
    Intent intent = new Intent(this, RegisterActivity.class);
    startActivity(intent);
    }
(15)在RegisterActivity.java 修改protected void onCreate(Bundle savedInstanceState)函數
程式碼: [Select]
//在RegisterActivity下面
public final static String EXTRA_MESSAGE = "com.example.xxx.MESSAGE";
static String[] vSection = new String[7];
    int selectedDay = 0;//掛號日
程式碼: [Select]
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat SDF2 = new SimpleDateFormat("MM-dd");
        Calendar cal = Calendar.getInstance(Locale.TAIWAN);
        Date now = new Date();
        cal.setTime(now);
        Date theday;
        String dateStr;

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
        RadioButton radioButton;

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);//今天
        theday = cal.getTime();
        vSection[0] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio0);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--明天
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[1] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio1);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[2] = SDF.format(theday);
        dateStr =SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio2);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[3] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio3);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[4] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio4);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[5] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio5);
        radioButton.setText(dateStr);

        cal.add(Calendar.DAY_OF_YEAR, 1); // <--
        theday = cal.getTime();
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        vSection[6] = SDF.format(theday);
        dateStr = SDF2.format(theday) +"("+ToWeekdayTC(dayOfWeek)+")";
        radioButton = (RadioButton) findViewById(R.id.radio6);
        radioButton.setText(dateStr);
    }
    private static String ToWeekdayTC(int dayOfWeek)
    {
        switch(dayOfWeek){
            case Calendar.SUNDAY:
                return "星期日";
            case Calendar.MONDAY:
                return"星期一";
            case Calendar.TUESDAY:
                return"星期二";
            case Calendar.WEDNESDAY:
                return"星期三";
            case Calendar.THURSDAY:
                return"星期四";
            case Calendar.FRIDAY:
                return"星期五";
            case Calendar.SATURDAY:
                return"星期六";
        }
        return "星期日";
    }
(16) 在模擬器中查看app
« 最後編輯時間: 十二月 25, 2014, 06:51:23 am 由 admin »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1873
    • 檢視個人資料
回覆: [App Client 2] 預約掛號
« 回覆文章 #3 於: 十二月 25, 2014, 06:53:19 am »
(17) 在RegisterActivity.java下面 }的前面
程式碼: [Select]
    public void submitRegisterActivity(View view) {
        // Do something in response to button
        new NetActionTask().execute("http://clinic.aiplab.net/app_register_guest.php");
    }

    public void showOrderActivity(View view) {
        // Do something in response to button
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

    public void onRadioButtonClicked(View view) {
        // Is the button now checked?
        boolean checked = ((RadioButton) view).isChecked();
        //Log.v("XXX", view.toString());
        if (checked)
        {
            Button btn = (Button) findViewById(R.id.button1);
            btn.setEnabled(true);
            // Check which radio button was clicked
            switch(view.getId()) {
                case R.id.radio0:
                    selectedDay = 0;
                    break;
                case R.id.radio1:
                    selectedDay = 1;
                    break;
                case R.id.radio2:
                    selectedDay = 2;
                    break;
                case R.id.radio3:
                    selectedDay = 3;
                    break;
                case R.id.radio4:
                    selectedDay = 4;
                    break;
                case R.id.radio5:
                    selectedDay = 5;
                    break;
                case R.id.radio6:
                    selectedDay = 6;
                    break;
            }

        }
    }
    private class NetActionTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {

            try {
                return postToNetwork(urls[0]);
            } catch (IOException e) {
                return getString(R.string.connection_error);
            }
        }

        /**
         * Uses the logging framework to display the output of the fetch
         * operation in the log fragment.
         */
        @Override
        protected void onPostExecute(String result) {
            //這裡要換頁

            View view = findViewById(android.R.id.content);
            Intent intent = new Intent(view.getContext(), RegResultActivity.class);
            intent.putExtra(EXTRA_MESSAGE, result);
            startActivity(intent);
        }
    }
    /** Initiates the fetch operation. */
    private String postToNetwork(String urlString) throws IOException {
        InputStream stream = null;
        String str ="NONO";

        try {
            stream = fromUrl(urlString);
            str = readIt(stream, 500);
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
        return str;
    }

    private InputStream fromUrl(String urlString) throws IOException {
        // BEGIN_INCLUDE(get_inputstream)
        URL url = new URL(urlString);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("POST");
        http.setDoInput(true);
        http.setDoOutput(true);
        //Get parameters
        EditText editText1 = (EditText) findViewById(R.id.editText1);
        EditText editText2 = (EditText) findViewById(R.id.editText2);

        String  paramDate = vSection[selectedDay];//e.g. "2014-09-27";
        String  paramName = editText1.getText().toString().trim(); //e.g. "James Wang";
        String  paramID = editText2.getText().toString().trim(); //e.g."K111222333";
        // Start the query
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("WhichDate", paramDate));
        params.add(new BasicNameValuePair("PatientID", paramName));
        params.add(new BasicNameValuePair("PatientName", paramID));

        OutputStream os = http.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(getQuery(params));
        writer.flush();
        writer.close();
        os.close();
        http.connect();

        InputStream stream = http.getInputStream();
        return stream;
        // END_INCLUDE(get_inputstream)
    }
    private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
    {
        StringBuilder result = new StringBuilder();
        boolean first = true;

        for (NameValuePair pair : params)
        {
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
        }

        return result.toString();
    }
    private String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
        Reader reader = null;
        reader = new InputStreamReader(stream, "UTF-8");
        char[] buffer = new char[len];
        reader.read(buffer);
        return new String(buffer);
    }
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1873
    • 檢視個人資料
回覆: [App Client 2] 預約掛號
« 回覆文章 #4 於: 十二月 25, 2014, 06:58:27 am »
(18) 在RegResultActivity.java
程式碼: [Select]
//在 RegResultActivity下面加上
static String regResult = "";

(19) 在RegResultActivity.java 修改protected void onCreate(Bundle savedInstanceState)函數
程式碼: [Select]
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reg_result);
        Intent intent = getIntent();
        regResult = intent.getStringExtra(RegisterActivity.EXTRA_MESSAGE);
        // Get the message from the intent
        WebView wv = (WebView) findViewById(R.id.webView1);
        wv.loadData(regResult, "text/html; charset=UTF-8", null);
    }
已記錄
 

SimplePortal Classic 2.0.5