text:
Lễ khai giảng năm học 2014- 2015
Thời gian: 07 giờ 00 ngày 5/9/2014
Địa điểm: Trường THCS Nguyễn Đình Chiểu
Thành phần: Toàn thể học sinh, giáo viên, CB-CNV nhà trường.
*Lưu ý: Học sinh tập trung lúc 06 giờ 00
Lễ khai giảng năm học 2013 - 2014
Lễ khai giảng năm học 2013 - 2014
Thời gian: 7 giờ ngày 5 tháng 9 năm 2013.
Thời gian tập trung học sinh: 6 giờ 30'; học sinh lớp 9 phụ trách lễ đài, âm thanh có mặt lúc 6 giờ 00.
Thành phần: Toàn thể cán bộ - viên chức nhà trường; tất cả học sinh nhà trường.
HIỆU TRƯỞNG
Thông báo thời gian thi " Tiếng hát học đường"
Chiều nay, vào lúc 14h Đoàn văn nghệ nhà trường dự thi " Tiếng hát học đường" Thành Phố Nha Trang
Địa điểm: Nhà Văn Hóa Thiếu Nhi 62 Thái Nguyên - Nha Trang.
Thầy cô giáo và các em học sinh sắp xếp thời gian đến cổ vũ cho phong trào văn nghệ của nhà trường.
CLB Chúng em yêu khoa học
Cuộc thi chúng em yêu khoa học tạm hoãn đến hết tuần 18, để các em học sinh dành thời gian cho việc ôn tập và thi học kì 1.
CLB Chúng em yêu khoa học thông báo
Ngày 13/02/2015 nhà trường đã tổ chức buổi sinh hoạt ngoại khóa " HỘI XUÂN 2015" với nhiều nội dung: Thi văn nghệ, thi làm mứt ngày Tết và thi viết câu đối. Hoạt động này đã thu hút sự tham gia tích cực, sôi nỗi của học sinh, thông qua các hoạt động đã giáo dục các kĩ năng sống cho học sinh.
Một số hình ảnh
Một số video các tiết mục văn nghệ
Tiết mục nhảy múa " Con bướm xuân" của lớp 9/1
Tiết mục hát múa " Điệp khúc mùa xuân" của lớp 7/2
Các cụ ta từ xưa đã có câu: “Nhất tự vi sư, bán tự vi sư”. Một chữ cũng là thầy, nửa chữ cũng là thầy. Truyền thống tôn sư trọng đạo đẫ được gìn giữ trong nhận thức của mỗi người dân Việt Nam.
Vào lúc 19h 30 ngày 06 tháng 09 năm 2014. Thầy và trò trường THCS Nguyễn Đình Chiểu tổ chức chương trình sinh hoạt ngoại khóa " Đêm hội trăng rằm" với nhiều nội dung phong phú như: thi rước đèn trung thu, thi văn nghệ, múa lân...Đây là một hoạt động thật sự có ý nghĩa, tạo sân chơi bổ ích cho học sinh, qua đó giáo dục cho học sinh về truyền thống, văn hóa cội nguồn của dân tộc...

WARC-Type: response

Content-Type: application/http; msgtype=response

Cache-Control: private

Content-Type: text/html; charset=utf-8

Connection: close


text:
The post Lập trình web với Java chức năng tim kiếm appeared first on .]]>
Xem cách import và export úng dụng java web tại đây
Download source code Tại đây
The post Lập trình web với Java chức năng tim kiếm appeared first on .]]>
The post Ứng dụng tạo slide show ảnh appeared first on .]]>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:text="@string/app_logo_top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/TextViewTopTitle" android:gravity="center|top" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ImageView3_left" android:layout_gravity="center_horizontal|center_vertical" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Exit" android:id="@+id/close" android:onClick="onClick" /> </RelativeLayout> </LinearLayout>
package com.example.mac.myapplication; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import java.util.List; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends Activity { public int currentimageindex=0; ImageView slidingimage; private int[] IMAGE_IDS = {R.drawable.splash0,R.drawable.splash1,R.drawable.splash2,R.drawable.splash3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Handler mHandler = new Handler(); final Runnable mUpdateResults = new Runnable() { public void run() { AnimateandSlideShow(); } }; int delay = 500; int period = 7500; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { mHandler.post(mUpdateResults); } },delay,period); } public void onClick(View v) { finish(); //android.os.Process.killProcess(android.os.Process.myPid()); ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); if(am != null) { List<ActivityManager.AppTask> tasks = am.getAppTasks(); if (tasks != null) { tasks.get(0).finishAndRemoveTask(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private void AnimateandSlideShow() { slidingimage = (ImageView)findViewById(R.id.ImageView3_left); slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]); currentimageindex++; Animation rotateimage = AnimationUtils.loadAnimation(this,android.R.anim.fade_in); slidingimage.startAnimation(rotateimage); } }
The post Ứng dụng tạo slide show ảnh appeared first on .]]>
The post Ứng dụng hiển thị ảnh trên Smartphone appeared first on .]]>
package com.example.mac.slider01; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.CursorLoader; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SimpleCursorAdapter; import android.widget.Toast; import java.io.LineNumberReader; public class MainActivity extends Activity { final Uri sourceUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; final Uri thumbUri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; final String thumb_IMAGE_DATA = MediaStore.Images.Thumbnails.DATA; final String thumb_IMAGE_ID = MediaStore.Images.Thumbnails.IMAGE_ID; private GridView myGridView; private MyAdapter mySimpleCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myGridView = (GridView) findViewById(R.id.gridView); String[] from = {MediaStore.MediaColumns.TITLE}; int[] to = {android.R.id.text1}; CursorLoader cursorLoader = new CursorLoader(this,sourceUri,null,null,null, MediaStore.Images.Media.TITLE); Cursor cursor = cursorLoader.loadInBackground(); mySimpleCursorAdapter= new MyAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); myGridView.setAdapter(mySimpleCursorAdapter); AdapterView.OnItemClickListener myOnItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View view,int position,long arg3) { Cursor cursor = mySimpleCursorAdapter.getCursor(); cursor.moveToPosition(position); int int_ID = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)); getThumbnail(int_ID); } }; myGridView.setOnItemClickListener(myOnItemClickListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public Bitmap getThumbnail(int int_ID) { String[] thumbColumn = {thumb_IMAGE_DATA,thumb_IMAGE_ID}; CursorLoader thumbCursorLoader = new CursorLoader(this,thumbUri,thumbColumn,thumb_IMAGE_ID+"="+int_ID,null,null); Cursor thumbCursor = thumbCursorLoader.loadInBackground(); Bitmap thumbBitmap = null; if(thumbCursor.moveToFirst()) { int thColumnIndex = thumbCursor.getColumnIndex(thumb_IMAGE_DATA); String thumbPath = thumbCursor.getString(thColumnIndex); Toast.makeText(getApplicationContext(),thumbPath,Toast.LENGTH_LONG).show(); thumbBitmap = BitmapFactory.decodeFile(thumbPath); AlertDialog.Builder thumbDialog = new AlertDialog.Builder(MainActivity.this); ImageView thumbView = new ImageView(MainActivity.this); thumbView.setImageBitmap(thumbBitmap); LinearLayout layout = new LinearLayout(MainActivity.this); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(thumbView); thumbDialog.setView(layout); thumbDialog.show(); } else { Toast.makeText(getApplicationContext(),"No thumbnail",Toast.LENGTH_LONG).show(); } return thumbBitmap; } public class MyAdapter extends SimpleCursorAdapter { private Cursor myCursor; private Context myContext; MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flag) { super(context, layout, c, from, to, flag); myCursor = c; myContext = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; if (row == null) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.row, parent, false); } ImageView thumbv = (ImageView) row.findViewById(R.id.thumbnail); //move to next image myCursor.moveToPosition(position); int myID = myCursor.getInt(myCursor.getColumnIndex(MediaStore.Images.Media._ID)); String[] thumbColumns = {thumb_IMAGE_DATA, thumb_IMAGE_ID}; CursorLoader thumbCursorLoader = new CursorLoader(myContext, thumbUri, thumbColumns, thumb_IMAGE_ID + "=" + myID, null, null); Cursor thumbCursor = thumbCursorLoader.loadInBackground(); Bitmap myBitmap = null; if (thumbCursor.moveToFirst()) { int thColumnIndex = thumbCursor.getColumnIndex(thumb_IMAGE_DATA); String thumbPath = thumbCursor.getString(thColumnIndex); myBitmap = BitmapFactory.decodeFile(thumbPath); thumbv.setImageBitmap(myBitmap); } return row; } } }
The post Ứng dụng hiển thị ảnh trên Smartphone appeared first on .]]>
The post Slider.jar appeared first on .]]>
The post Slider.jar appeared first on .]]>
The post Lập trình java – thay đổi trạng thái trong ứng dụng JavaFX appeared first on .]]>
Mục đích của chủ đề này hướng dẫn cách tạo 1 ứng dụng Java FX sử dụng nhiều trạng thái để hiển thị cho các chức năng khác nhau.
Yêu cầu:
+ Nắm vững JDBC
+ Nắm vững JSP
+ Đã đọc bài hướng dẫn “Kết hợp JavaFX với JSP và JDBC”
Tools sử dụng:
+ Netbeans IDE 6.9.1, đã cài đặt plugin JavaFX
+ JDK 6 update 22
+ Server: Tomcat Server 6.0.18
+ DBMS: MS SQL Server 2005
+ JDBC driver: sqljdbc4
Ở đây, chúng tôi tạo 1 chương trình như sau:
+ User cần login trước khi sử dụng
+ Sau khi login thành công, chuyển sang chức năng tìm kiếm danh bạ theo tên
+ Hiển thị kết quả tìm kiếm
+ Khi click vào từng item trong list, sẽ chuyển sang view hiển thị chi tiết về contact.
Click vào nút “Back” sẽ chuyển về màn hình tìm kiếm.
Bây giờ, chúng ta bắt đầu tạo ứng dụng trên.
Bước 1: Tạo database như sau
Bước 2: Tạo New Project > JavaFX Desktop Application
Bước 3: Thiết kế giao diện cho các chức năng
Ở màn hình design của file Main.fx, chúng ta click vào dấu “+” để thêm vào các state như sau
Chúng ta thêm vào 4 state:
Vì 4 state này độc lập với nhau nên chúng ta sẽ chọn là “Inherited from master state”
Sau khi thêm vào 4 state trên, chúng ta được như sau:
Bây giờ, chúng ta thêm vào các control cho mỗi state.
Chúng ta click vào state tương ứng để thêm vào control cho state đó.
Nếu chúng ta click vào <master>, các control được thêm vào sẽ có tác dụng tới tất cả các state đã được chọn “Inherited from master state”.
Trong ví dụ này, chúng ta chỉ thêm các control riêng cho từng state.
2. Search:
4. Detail:
Nút “Back” được thêm vào ở trạng thái result, do đó, ở trạng thái detail, để hiển thị nút “Back”, chúng ta chọn nút “Back” từ cửa sổ Navigator, và chọn Visible ở cửa sổ Properties
Bước 4: Thêm datasource
Tại màn hình design, trong cửa sổ Navigator, chúng ta thêm vào JDBC Data Source.
Cách thêm data source tương tự như ví dụ về “Kết hợp JavaFX với JSP và JDBC”. Nhưng ở bài này, chúng ta sẽ không đổ toàn bộ dữ liệu từ SQL Query vào listview, mà sẽ viết thêm function để tìm kiếm contact theo từ khóa được nhập vào.
Trong file DbDataSource.fx ở package org.netbeans.javafx.datasrc, chúng ta thêm vào function searchByContactName.
Cũng trong cùng package trên, chúng ta override function toString cho MapRecord:
Bước 5: Hiện thực chức năng login
Thêm sự kiện cho nút Login
Tên method để xử lý sự kiện do netbeans tạo ra có dạng btnLoginOnMouseClickAtlogin. Atlogin cho biết method này thực hiện khi click nút login khi đang ở trạng thái login, vì javafx cho phép xử lý sự kiện theo những cách khác nhau dựa theo trạng thái hiện tại.
Tiến hành load driver, tạo sql connection, sau đó tạo sql statement, và xử lý kết quả.
Khi username và password hợp lệ, chuyển sang trạng thái search.
Biến currentState là biến điều khiển trạng thái của ứng dụng. Chúng ta chuyển trạng thái bằng cách set giá trị actual (Integer) cho biến currentState. Method findIndex nhận vào đối số là tên trạng thái, và trả về index (Integer) của trạng thái.
Bước 6: Hiện thực chức năng tìm kiếm
Xử lý sự kiện khi click vào nút Search:
Chúng ta sẽ gọi function searchByContactName của DBDataSource để tìm kiếm theo từ khóa.
Sau đó, gán giá trị trả về vào listView, và chuyển sang trạng thái result.
Ở listView, xử lý sự kiện khi click vào các item trong listView, chuyển sang trạng thái hiển thị chi tiết của item đó.
Xử lý sự kiện khi click vào nút “Back” ở 2 trạng thái result và detail:
Bước 7: Đưa ứng dụng lên web application
Tạo mới Web Application với J2EE version 1.4
Copy các file từ thư mục dist của ứng dụng javafx vào web application, và thêm script vào file index.jsp tương tự như ví dụ “Kết hợp JavaFX với JSP và JDBC”.
Chạy web application.
Chúng ta đã hoàn tất ví dụ về ứng dụng JavaFX sử dụng nhiều trạng thái.
Rất mong sự góp ý chân thành của các bạn và hẹn gặp lại các bạn trong các bài giảng lập trình java tiếp theo.
The post Lập trình java – thay đổi trạng thái trong ứng dụng JavaFX appeared first on .]]>
The post Lập trình java – Login Application sử dụng Facebook (phần 2) appeared first on .]]>
Tiếp theo, chúng ta sẽ thêm chức năng login bằng facebook vào ứng dụng.
Đầu tiên, chúng ta viết 1 class tên API Wrapper, chứa các hàm cần dùng để liên lạc với facebook
AppID và App Secret chính là 2 giá trị Facebook cấp cho chúng ta khi tạo app. Nếu đã quên, quý vị làm các bước sau để xem lại
Bấm vào “Quản lý ứng dụng”
Chọn App phía bên trái, bấm vào “Chỉnh sửa thiếp lập”
Copy AppID và AppSecret vào file APIWrapper
Redirect Url tức là Url facebook redirect về sau khi user accept, ta set giá trị là đường dẫn đến 1 servlet khác của ứng dụng (Trong trường hợp này là FacebookServlet, sẽ tạo trong bước tiếp theo).
Từ code có được sau khi facebook redirect về, ta gửi code, clientID, client sescret lên graph API để request AccessToken, do kết quả trả về có dạng:
access_token={access-token}&expires={seconds-til-expiration}
Ta dùng hàm substring để cắt chuỗi access-token từ chuỗi trả về.
Ở đây, ta gửi AccessToken lên server để lấy về thông tin của người dùng. Thông tin trả về dưới dạng Json, ta dùng Gson để parse.
Thông tin gson trả về:
Các trường này sẽ được mapping vào object UserInfo.
Tiếp theo, chúng ta tạo 1 servlet tên là FacebookServlet.
Cấu trúc hiện tại của project
Code đã có comment ghi rõ công việc từng dòng code thực hiện, quý vị vui lòng đọc comment.
Ta bổ sung thêm 1 link login bằng Facebook trong trang index.jsp
Tôi sẽ debug quá trình này để quý vị có cái nhìn rõ ràng hơn về flow chương trình.
Khi ta bấm vào link “Login via Facebook”, bấm “Đồng ý”, facebook sẽ redirect về Facebook Servlet. Ta lấy được code từ request.
Gửi code đã lấy ở bước 1, ta lấy được kết quả trả về từ facebook API, xử lý chuỗi này ta được access token
Gửi token này lên, ta lấy được chuỗi json chứa thông tin user
Ta parse chuỗi này ra thành object, sau đó xử lý (Lưu xuống database, hoặc login).
Build & Deploy, ta được
Database trước khi bấm vào Login via Facebook
Bấm vào Login via Facebook.
Bấm “Đồng ý”
Database sau khi login
Chúc mừng quý vị đã hoàn thành xong bài lập trình java hướng dẫn cách login bằng tài khoảng facebook. Cơ chế login bằng tài khoảng Google, Yahoo cũng tương tự, quý vị có thể tích hợp chúng vào ứng dụng của mình. Cảm ơn quý vị đã theo dõi bài viết. Các bạn có thể xem lại phần 1 tại đây.
The post Lập trình java – Login Application sử dụng Facebook (phần 2) appeared first on .]]>
The post Lập trình java – Login Application sử dụng Facebook (phần 1) appeared first on .]]>
Mục đích: Bài viết này hướng dẫn cách thực hiện chức năng login vào ứng dụng J2EE, bằng tài khoảng facebook có sẵn.
Yêu cầu về kiến thức cơ bản:
Công nghệ sử dụng:
Giới thiệu
Login là 1 trong những chức năng gần như bắt buộc trong tất cả các ứng dụng. Trước kia, để có 1 tài khoản, người dùng phải đăng ký, điều này đôi khi gây khó chịu và gây mất thời gian. Hiện tại, hầu như mỗi người đều có 1 tài khoản facebook. Với chức năng login bằng tài khoảng facebook, người dùng có thể đăng nhập chỉ với 1 hay 2 cú click chuột, vô cùng thuận tiện.
Một điều khá ngạc nhiên là, khi chúng tôi tìm hiểu về bộ SDK của facebook, ngôn ngữ Java chỉ có 3 bộ SDK Java, 1 bộ cho Spring, 1 bộ cho Android, 1 bộ cho Black Berry. Hoàn toàn không có một bộ SDK nào hỗ trợ ứng dụng J2EE thông thường (Trái ngược với PHP, bộ SDK Facebook cho ngôn ngữ PHP tương đương đơn giản, dễ sử dụng).
https://developers.facebook.com/docs/sdks/
Vì lẽ đó, chúng tôi viết bài hướng dẫn này giúp quý vị hiểu rõ cơ chế authencation của facebook. Qua đó, quý vị có thể viết chức năng này không cần dùng SDK, cũng như mở rộng ra các ngôn ngữ khác.
Bài viết có tham khảo 1 phần cơ chế tại:
http://saysua.com/2013/09/03/viet-chuc-nang-login-bang-tai-khoan-facebook-khong-dung-facebook-sdk/
(Bài viết trên hướng dẫn viết cho ngôn ngữ PHP, quý vị có thể xem nếu có hứng thú)
Cơ chế Authencation của facebook
Khi ứng dụng của bạn muốn truy cập/chỉnh sửa thông tin từ phía người dùng, nó sẽ đưa ra 1 url dẫn tới pop-up, yêu cầu người dùng xác nhận.
Khi người dùng bấm nút “Chấp nhận”, facebook sẽ gửi trả lại ứng dụng 1 chuỗi chữ số gọi là Authorization Code. (Cửa sổ trên chỉ hiện 1 lần, nếu user đã đồng ý, facebook sẽ bỏ qua bước này, trả ngay Authorization code).
Từ Authorization Code này, ta đưa lên server, lấy về 1 access token dưới dạng
access_token={access-token}&expires={seconds-til-expiration}
Access Token này được sử dụng để gọi các hàm từ Facebook Graph API.
Quý vị có thể tìm hiểu thêm về Facebook API từ 2 link dưới đây:
Áp dụng trong ứng dụng J2EE
Trong trường hợp của chúng ta, chúng ta sử dụng Graph API này để lấy về các thông tin như: Facebook ID, Name, Username… của người dùng
Chúng ta sẽ so sánh Facebook ID với danh sách user trong database. Nếu như chưa có trong database thì ta register, rồi đăng nhập người dùng, nếu đã có dưới database thì chúng ta đăng nhập thẳng người dùng.
Diagram của quá trình login, nếu như user đã accept, bước 3,4 sẽ được bỏ đi, thay vào đó facebook sẽ trả thẳng Authorization code tới ứng dụng.
Xây dựng ứng dụng
Để thực hiện chức năng login bằng facebook, đầu tiên chúng ta cần tạo 1 ứng dụng trên facebook. Quý vị vào trang web sau đây:
https://developers.facebook.com/apps/
Bước 4 là bước quan trọng, quý vị nhớ chọn tên phù hợp cho ứng dụng của mình.
Đây là cửa sổ sau khi tạo ứng dụng
Quý vị nhớ bổ sung localhost vào app domain và site url. Ghi lại AppID và AppSecret để sử dụng trong ứng dụng.
Tiếp theo, chúng ta sẽ xây dựng 1 ứng dụng đơn giản cho phép login bằng facebook.
Database của ứng dụng chỉ có 1 bảng như phía dưới. Tôi đặt tên database là SimpleFacebookLogin
Password được phép null vì user có thể đăng nhập bằng facebook. FacebookID – ID của Account FB đăng nhập là 1 chuỗi số gồm 15 chữ số, tuy nhiên do chúng ta không có nhu cầu cộng trừ nhân chia hay so sánh nên ta lưu dưới dạng char(15).
Chúng ta bắt đầu tạo Web Application:
Chúng ta cần 2 bộ thư viện:
Gson 2.2.4: http://code.google.com/p/google-gson/downloads/list
Apache HttpComponent bản 4.3.1: http://hc.apache.org/downloads.cgi
Giải nén các file zip. Tạo thư mục lib, copy những file đó vào thư mục lib trong project, add library những file sau:
Quý vị cũng nhớ add thư viện sqljdbc4.jar để kết nối tới database.
Danh sách các thư viện sau khi add.
Ta tạo class DTO với những field sau
Đoạn annotation để mapping từ json vào object cho đúng field (JSON facebook trả về, có field id là id của tài khoản facebook, ta map field này vào field facebookID của object). Quý vị nhớ tạo get,set cho các field.
Tiếp tục viết hàm DBUtils. Để đơn giản, chúng tôi để connection string tĩnh trong code (để kết nối động, quí vị tham khảo lại bài Tạo kết nối động đến DB trong mô hình MVC Pattern trên Web Server (Tomcat))
Chương trình của chúng ta cho phép đăng kí, đăng nhập bình thường và đăng kí, đăng nhập bằng facebook, do đó chúng ta cần 4 method
Tiếp theo là register và login theo thông tin từ account facebook
Chúng ta viết thêm 1 class NetUtils, giúp đơn giản hóa việc kết nối và nhận dữ liệu từ Web
Hàm này nhận url, kết nối tới web và trả kết quả về dưới dạng String
Cấu trúc project hiện tại.
Chúng ta tạo 1 ứng dụng login bình thường, với chức năng login, register.
Ta tạo thêm 2 file jsp: register.jsp và logined.jsp
Quý vị nhớ add thêm thư viện JSTL để hỗ trợ taglib
Hàm if để phân biệt giữa user thường và user login bằng facebook
Ta tạo AccountServlet
Ở đây vì name ta cho phép nhập tiếng Việt nên phải sửa lại encode để hiển thị đúng
Clean & Build. Deploy ta có:
Bấm “here” để qua trang Register, nhập thông tin rồi bấm register
Đăng nhập sai
Đăng nhập đúng
Chúng ta đã hoàn thành bước đầu trong việc tạo lập login ứng dụng facebook. Hẹn gặp lại các bạn vào phần 2 của bài giảng cũng như những bài về lập trình java khác
The post Lập trình java – Login Application sử dụng Facebook (phần 1) appeared first on .]]>
The post Hạo thiên online – Siêu phẩm bom tấn appeared first on .]]>
Phiêu bạt ngang dọc khắp giang hồ, giới anh hùng luôn tâm khảm “Hữu duyên thiên lý năng tương ngộ, vô duyên đối diện bất tương phùng”.
Mỗi người sinh ra đều có duyên tiền kiếp, gặp nhau là duyên, PK cũng là duyên. Cũng nói rằng “không đánh không là bạn”, bởi vậy, những người có duyên sẽ tự tìm đến nhau trong thế giới Hạo Thiên.
Hệ thống 4 server với 3 quốc gia trên một server, một cộng đồng lớn mạnh chưa từng có, từ đồng xanh mênh mông đến làng mạc đơn sơ, luôn có những con người sát cánh bên bạn.
The post Hạo thiên online – Siêu phẩm bom tấn appeared first on .]]>
The post Khu vườn địa đàng appeared first on .]]>
Nơi mà bạn có thể Trồng Cây, Nuôi Chim, Kết bạn để tìm Gấu.Trước tiên bạn phải chăm sóc, tưới nước, thu hoạch cây trồng để kiếm gold để nâng câp chậu, tầng mây, mua Avatar, đồ trang trí thật đẹp trang hoàng cho khu vườn của mình.
Bạn có thể làm Nhiệm Vụ hàng ngày, Nhiệm Vụ chính thống để kiếm Gold và phần thưởng hấp dẫn.
Khu Giải Trí
Khu giải trí là nơi ăn chơi, tán gẫu và kén Gấu. Bạn có thể chơi Game Tiến Lên để tiêu khiển xả stress.
Chơi trò tính toán như: Phỏm, Caro… Trò Đại Gia là Xì Tố.Hoặc chơi Quay Số để lấy Thẻ Cào và đồ đẹp để có tiền nhắn tin và tặng đồ cho gấu.
Tại Bàn chơi bạn có thể Chát Chít Tán Gẫu, Xem Avatar và Thông tin Gấu.
Nếu đã tìm được một em Gấu ứng ý, bạn có thể qua khu Vườn Tình Yêu để kết hôn với Gấu.
Vườn Tình Yêu
Để vào được Vườn Tình Yêu bạn phải kết hôn với Gấu.Trước tiên bạn phải “Nhập Tên Gấu” gửi lời mời kết hôn đến Gấu.
Nếu Gấu “Đồng Ý” bạn và gấu có thể vào Vườn Tình Yêu chăm sóc tổ ấm của mình thôi !
Trồng hoa, nuôi thiên thần, trang trí vườn kêu gọi bạn bè mình Like, đua top Ring quà đôi độc như: Áo Đôi, Đồng Hồ đôi …
Vườn Cảnh Vệ
Vào một ngày đẹp trời Bạn và Gấu đang nằm thả hồn mơ mộng bỗng đâu đó xuất hiện hàng loạt quái thú tấn công khu vườn.
Bạn và Gấu phải làm gì ? Hãy xây dựng một khu Vườn Cảnh Vệ để chống bọn quái thú gian ác phá hoại mùa màng.
Cũng khá vất vả và gian nan bạn phải: Đặt chậu, trồng hoa.. cường hóa hoa thật mạnh để có thể bắn hạ những con thú hung ác.
Chúc Bạn và Gấu bảo vệ được tổ ấm của mình và có một Vườn Địa Đàng thật đẹp !
The post Khu vườn địa đàng appeared first on .]]>
The post Memory Clean – Android – DDL appeared first on .]]>
Bạn cảm thấy thất vọng với điện thoại Android đi chậm? Hoặc nó không làm việc nhanh hơn sau khi sử dụng với các ứng dụng nhiều hơn?Bộ nhớ RAM sạch là công cụ để xóa bộ nhớ RAM của bạn và tăng cường thiết bị của bạn và giải phóng không gian bộ nhớ RAM hơn để thực hiện các ứng dụng khác nữa.
Nó không phải là nhiệm vụ kẻ giết người, công tác quản lý hoặc không giết bất kỳ dịch vụ hoặc không ảnh hưởng đến các ứng dụng khác của bạn, Nó chỉ cần làm sạch bộ nhớ RAM của bạn.
Một số ứng dụng trong điện thoại của bạn sử dụng thêm RAM cho thực hiện và có nhiều bộ nhớ của nó mà thực sự không sử dụng cho các ứng dụng, Vì vậy, người dùng có một tùy chọn để xóa bộ nhớ ứng dụng được chọn.
Tính năng ứng dụng:
• Tăng tốc độ điện thoại của bạn
• Làm cho nhiều không gian bộ nhớ RAM cho các ứng dụng khác để thực hiện.
• bộ nhớ không cần thiết sạch
• Đơn giản giao diện người dùng, dễ sử dụng
• thực hiện RAM Progressive
• Đó là miễn phí
New tính năng bổ sung
• Chúng tôi thêm đơn vòi RAM phụ tùng bộ nhớ sạch hơn. Bạn có thể tìm thấy nó trong ứng dụng tiện ích của bạn.
• Chúng tôi bổ sung thêm bộ nhớ RAM tự động làm sạch,
-Đó Là tự động loại bỏ số lượng lớn khi RAM của bạn rất nhiều tải.
-Khi bộ nhớ có sẵn RAM còn lại ít hơn 10% bộ nhớ RAM sạch và tăng tốc điện thoại của bạn
Phiên bản 1.3
sửa chữa -bug
chủ đề -Tùy
Kích thước ứng dụng -Giảm
The post Memory Clean – Android – DDL appeared first on .]]>

markdown:
The post
[Lập trình web với Java chức năng tim kiếm](http://chophanmem.com.vn/lap-trinh-web-voi-java-chuc-nang-tim-kiem/) appeared first on [.](http://chophanmem.com.vn)
Xem cách import và export úng dụng java web tại đây
Download source code
[Tại đây](http://chophanmem.com.vn/wp-content/uploads/2015/06/Hoc-lap-trinh-SearchProject.zip)
The post
[Lập trình web với Java chức năng tim kiếm](http://chophanmem.com.vn/lap-trinh-web-voi-java-chuc-nang-tim-kiem/) appeared first on [.](http://chophanmem.com.vn)
The post
[Ứng dụng tạo slide show ảnh](http://chophanmem.com.vn/ung-dung-tao-slide-show-anh/) appeared first on [.](http://chophanmem.com.vn)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:text="@string/app_logo_top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/TextViewTopTitle" android:gravity="center|top" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ImageView3_left" android:layout_gravity="center_horizontal|center_vertical" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Exit" android:id="@+id/close" android:onClick="onClick" /> </RelativeLayout> </LinearLayout>
package com.example.mac.myapplication; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import java.util.List; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends Activity { public int currentimageindex=0; ImageView slidingimage; private int[] IMAGE_IDS = {R.drawable.splash0,R.drawable.splash1,R.drawable.splash2,R.drawable.splash3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Handler mHandler = new Handler(); final Runnable mUpdateResults = new Runnable() { public void run() { AnimateandSlideShow(); } }; int delay = 500; int period = 7500; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { mHandler.post(mUpdateResults); } },delay,period); } public void onClick(View v) { finish(); //android.os.Process.killProcess(android.os.Process.myPid()); ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); if(am != null) { List<ActivityManager.AppTask> tasks = am.getAppTasks(); if (tasks != null) { tasks.get(0).finishAndRemoveTask(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private void AnimateandSlideShow() { slidingimage = (ImageView)findViewById(R.id.ImageView3_left); slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]); currentimageindex++; Animation rotateimage = AnimationUtils.loadAnimation(this,android.R.anim.fade_in); slidingimage.startAnimation(rotateimage); } }
The post
[Ứng dụng tạo slide show ảnh](http://chophanmem.com.vn/ung-dung-tao-slide-show-anh/) appeared first on [.](http://chophanmem.com.vn)
The post
[Ứng dụng hiển thị ảnh trên Smartphone](http://chophanmem.com.vn/ung-dung-hien-thi-anh-tren-smartphone/) appeared first on [.](http://chophanmem.com.vn)
package com.example.mac.slider01; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.CursorLoader; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SimpleCursorAdapter; import android.widget.Toast; import java.io.LineNumberReader; public class MainActivity extends Activity { final Uri sourceUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; final Uri thumbUri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; final String thumb_IMAGE_DATA = MediaStore.Images.Thumbnails.DATA; final String thumb_IMAGE_ID = MediaStore.Images.Thumbnails.IMAGE_ID; private GridView myGridView; private MyAdapter mySimpleCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myGridView = (GridView) findViewById(R.id.gridView); String[] from = {MediaStore.MediaColumns.TITLE}; int[] to = {android.R.id.text1}; CursorLoader cursorLoader = new CursorLoader(this,sourceUri,null,null,null, MediaStore.Images.Media.TITLE); Cursor cursor = cursorLoader.loadInBackground(); mySimpleCursorAdapter= new MyAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); myGridView.setAdapter(mySimpleCursorAdapter); AdapterView.OnItemClickListener myOnItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View view,int position,long arg3) { Cursor cursor = mySimpleCursorAdapter.getCursor(); cursor.moveToPosition(position); int int_ID = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)); getThumbnail(int_ID); } }; myGridView.setOnItemClickListener(myOnItemClickListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public Bitmap getThumbnail(int int_ID) { String[] thumbColumn = {thumb_IMAGE_DATA,thumb_IMAGE_ID}; CursorLoader thumbCursorLoader = new CursorLoader(this,thumbUri,thumbColumn,thumb_IMAGE_ID+"="+int_ID,null,null); Cursor thumbCursor = thumbCursorLoader.loadInBackground(); Bitmap thumbBitmap = null; if(thumbCursor.moveToFirst()) { int thColumnIndex = thumbCursor.getColumnIndex(thumb_IMAGE_DATA); String thumbPath = thumbCursor.getString(thColumnIndex); Toast.makeText(getApplicationContext(),thumbPath,Toast.LENGTH_LONG).show(); thumbBitmap = BitmapFactory.decodeFile(thumbPath); AlertDialog.Builder thumbDialog = new AlertDialog.Builder(MainActivity.this); ImageView thumbView = new ImageView(MainActivity.this); thumbView.setImageBitmap(thumbBitmap); LinearLayout layout = new LinearLayout(MainActivity.this); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(thumbView); thumbDialog.setView(layout); thumbDialog.show(); } else { Toast.makeText(getApplicationContext(),"No thumbnail",Toast.LENGTH_LONG).show(); } return thumbBitmap; } public class MyAdapter extends SimpleCursorAdapter { private Cursor myCursor; private Context myContext; MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flag) { super(context, layout, c, from, to, flag); myCursor = c; myContext = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; if (row == null) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.row, parent, false); } ImageView thumbv = (ImageView) row.findViewById(R.id.thumbnail); //move to next image myCursor.moveToPosition(position); int myID = myCursor.getInt(myCursor.getColumnIndex(MediaStore.Images.Media._ID)); String[] thumbColumns = {thumb_IMAGE_DATA, thumb_IMAGE_ID}; CursorLoader thumbCursorLoader = new CursorLoader(myContext, thumbUri, thumbColumns, thumb_IMAGE_ID + "=" + myID, null, null); Cursor thumbCursor = thumbCursorLoader.loadInBackground(); Bitmap myBitmap = null; if (thumbCursor.moveToFirst()) { int thColumnIndex = thumbCursor.getColumnIndex(thumb_IMAGE_DATA); String thumbPath = thumbCursor.getString(thColumnIndex); myBitmap = BitmapFactory.decodeFile(thumbPath); thumbv.setImageBitmap(myBitmap); } return row; } } }
The post
[Ứng dụng hiển thị ảnh trên Smartphone](http://chophanmem.com.vn/ung-dung-hien-thi-anh-tren-smartphone/) appeared first on [.](http://chophanmem.com.vn)
The post
[Slider.jar](http://chophanmem.com.vn/slider-jar/) appeared first on [.](http://chophanmem.com.vn)
The post
[Slider.jar](http://chophanmem.com.vn/slider-jar/) appeared first on [.](http://chophanmem.com.vn)
The post
[Lập trình java – thay đổi trạng thái trong ứng dụng JavaFX](http://chophanmem.com.vn/lap-trinh-java-thay-doi-trang-thai-trong-ung-dung-javafx/) appeared first on [.](http://chophanmem.com.vn)
Mục đích của chủ đề này hướng dẫn cách tạo 1 ứng dụng Java FX sử dụng nhiều trạng thái để hiển thị cho các chức năng khác nhau.
Yêu cầu:
+ Nắm vững JDBC
+ Nắm vững JSP
+ Đã đọc bài hướng dẫn “Kết hợp JavaFX với JSP và JDBC”
Tools sử dụng:
+ Netbeans IDE 6.9.1, đã cài đặt plugin JavaFX
+ JDK 6 update 22
+ Server: Tomcat Server 6.0.18
+ DBMS: MS SQL Server 2005
+ JDBC driver: sqljdbc4
Ở đây, chúng tôi tạo 1 chương trình như sau:
+ User cần login trước khi sử dụng
+ Sau khi login thành công, chuyển sang chức năng tìm kiếm danh bạ theo tên
+ Hiển thị kết quả tìm kiếm
+ Khi click vào từng item trong list, sẽ chuyển sang view hiển thị chi tiết về contact.
Click vào nút “Back” sẽ chuyển về màn hình tìm kiếm.
Bây giờ, chúng ta bắt đầu tạo ứng dụng trên.
**Bước 1: Tạo database như sau** **Bước 2: Tạo New Project > JavaFX Desktop Application** **Bước 3: Thiết kế giao diện cho các chức năng**
Ở màn hình design của file Main.fx, chúng ta click vào dấu “+” để thêm vào các state như sau
Chúng ta thêm vào 4 state:
Vì 4 state này độc lập với nhau nên chúng ta sẽ chọn là “Inherited from master state”
Sau khi thêm vào 4 state trên, chúng ta được như sau:
Bây giờ, chúng ta thêm vào các control cho mỗi state.
Chúng ta click vào state tương ứng để thêm vào control cho state đó.
Nếu chúng ta click vào <master>, các control được thêm vào sẽ có tác dụng tới tất cả các state đã được chọn “Inherited from master state”.
Trong ví dụ này, chúng ta chỉ thêm các control riêng cho từng state.
**2. Search:** **4. Detail:**
Nút “Back” được thêm vào ở trạng thái result, do đó, ở trạng thái detail, để hiển thị nút “Back”, chúng ta chọn nút “Back” từ cửa sổ Navigator, và chọn Visible ở cửa sổ Properties
**Bước 4: Thêm datasource**
Tại màn hình design, trong cửa sổ Navigator, chúng ta thêm vào JDBC Data Source.
Cách thêm data source tương tự như ví dụ về “Kết hợp JavaFX với JSP và JDBC”. Nhưng ở bài này, chúng ta sẽ không đổ toàn bộ dữ liệu từ SQL Query vào listview, mà sẽ viết thêm function để tìm kiếm contact theo từ khóa được nhập vào.
Trong file DbDataSource.fx ở package org.netbeans.javafx.datasrc, chúng ta thêm vào function searchByContactName.
Cũng trong cùng package trên, chúng ta override function toString cho MapRecord:
**Bước 5: Hiện thực chức năng login**
Thêm sự kiện cho nút Login
Tên method để xử lý sự kiện do netbeans tạo ra có dạng btnLoginOnMouseClick
**Atlogin.** **Atlogin** cho biết method này thực hiện khi click nút login khi đang ở trạng thái login, vì javafx cho phép xử lý sự kiện theo những cách khác nhau dựa theo trạng thái hiện tại.
Tiến hành load driver, tạo sql connection, sau đó tạo sql statement, và xử lý kết quả.
Khi username và password hợp lệ, chuyển sang trạng thái search.
**Biến currentState là biến điều khiển trạng thái của ứng dụng. Chúng ta chuyển trạng thái bằng cách set giá trị actual (Integer) cho biến currentState. Method findIndex nhận vào đối số là tên trạng thái, và trả về index (Integer) của trạng thái.** **Bước 6: Hiện thực chức năng tìm kiếm**
Xử lý sự kiện khi click vào nút Search:
Chúng ta sẽ gọi function searchByContactName của DBDataSource để tìm kiếm theo từ khóa.
Sau đó, gán giá trị trả về vào listView, và chuyển sang trạng thái result.
Ở listView, xử lý sự kiện khi click vào các item trong listView, chuyển sang trạng thái hiển thị chi tiết của item đó.
Xử lý sự kiện khi click vào nút “Back” ở 2 trạng thái result và detail:
**Bước 7: Đưa ứng dụng lên web application**
Tạo mới Web Application với J2EE version 1.4
Copy các file từ thư mục dist của ứng dụng javafx vào web application, và thêm script vào file index.jsp tương tự như ví dụ “Kết hợp JavaFX với JSP và JDBC”.
Chạy web application.
Chúng ta đã hoàn tất ví dụ về ứng dụng JavaFX sử dụng nhiều trạng thái.
Rất mong sự góp ý chân thành của các bạn và hẹn gặp lại các bạn trong các bài giảng
[tiếp theo. lập trình java ](http://chophanmem.com.vn/category/hoc-lap-trinh/ngon-ngu-java/)
The post
[Lập trình java – thay đổi trạng thái trong ứng dụng JavaFX](http://chophanmem.com.vn/lap-trinh-java-thay-doi-trang-thai-trong-ung-dung-javafx/) appeared first on [.](http://chophanmem.com.vn)
The post
[Lập trình java – Login Application sử dụng Facebook (phần 2)](http://chophanmem.com.vn/lap-trinh-java-login-application-su-dung-facebook-phan-2/) appeared first on [.](http://chophanmem.com.vn)
Tiếp theo, chúng ta sẽ thêm chức năng login bằng facebook vào ứng dụng.
Đầu tiên, chúng ta viết 1 class tên API Wrapper, chứa các hàm cần dùng để liên lạc với facebook
AppID và App Secret chính là 2 giá trị Facebook cấp cho chúng ta khi tạo app. Nếu đã quên, quý vị làm các bước sau để xem lại
Bấm vào “Quản lý ứng dụng”
Chọn App phía bên trái, bấm vào “Chỉnh sửa thiếp lập”
Copy AppID và AppSecret vào file APIWrapper
Redirect Url tức là Url facebook redirect về sau khi user accept, ta set giá trị là đường dẫn đến 1 servlet khác của ứng dụng (Trong trường hợp này là FacebookServlet, sẽ tạo trong bước tiếp theo).
Từ code có được sau khi facebook redirect về, ta gửi code, clientID, client sescret lên graph API để request AccessToken, do kết quả trả về có dạng:
access_token={access-token}&expires={seconds-til-expiration}
Ta dùng hàm substring để cắt chuỗi access-token từ chuỗi trả về.
Ở đây, ta gửi AccessToken lên server để lấy về thông tin của người dùng. Thông tin trả về dưới dạng Json, ta dùng Gson để parse.
Thông tin gson trả về:
Các trường này sẽ được mapping vào object UserInfo.
Tiếp theo, chúng ta tạo 1 servlet tên là FacebookServlet.
Cấu trúc hiện tại của project
Code đã có comment ghi rõ công việc từng dòng code thực hiện, quý vị vui lòng đọc comment.
Ta bổ sung thêm 1 link login bằng Facebook trong trang index.jsp
Tôi sẽ debug quá trình này để quý vị có cái nhìn rõ ràng hơn về flow chương trình.
Khi ta bấm vào link “Login via Facebook”, bấm “Đồng ý”, facebook sẽ redirect về Facebook Servlet. Ta lấy được code từ request.
Gửi code đã lấy ở bước 1, ta lấy được kết quả trả về từ facebook API, xử lý chuỗi này ta được access token
Gửi token này lên, ta lấy được chuỗi json chứa thông tin user
Ta parse chuỗi này ra thành object, sau đó xử lý (Lưu xuống database, hoặc login).
Build & Deploy, ta được
Database trước khi bấm vào Login via Facebook
Bấm vào Login via Facebook.
Bấm “Đồng ý”
Database sau khi login
Chúc mừng quý vị đã hoàn thành xong bài
** hướng dẫn cách login bằng tài khoảng facebook. Cơ chế login bằng tài khoảng Google, Yahoo cũng tương tự, quý vị có thể tích hợp chúng vào ứng dụng của mình. Cảm ơn quý vị đã theo dõi bài viết. Các bạn có thể xem lại phần 1 lập trình java**
The post
[Lập trình java – Login Application sử dụng Facebook (phần 2)](http://chophanmem.com.vn/lap-trinh-java-login-application-su-dung-facebook-phan-2/) appeared first on [.](http://chophanmem.com.vn)
The post
[Lập trình java – Login Application sử dụng Facebook (phần 1)](http://chophanmem.com.vn/lap-trinh-java-login-application-su-dung-facebook-phan-1/) appeared first on [.](http://chophanmem.com.vn)
Mục đích: Bài viết này hướng dẫn cách thực hiện chức năng login vào ứng dụng J2EE, bằng tài khoảng facebook có sẵn.
Yêu cầu về kiến thức cơ bản:
Công nghệ sử dụng:
**Giới thiệu**
Login là 1 trong những chức năng gần như bắt buộc trong tất cả các ứng dụng. Trước kia, để có 1 tài khoản, người dùng phải đăng ký, điều này đôi khi gây khó chịu và gây mất thời gian. Hiện tại, hầu như mỗi người đều có 1 tài khoản facebook. Với chức năng login bằng tài khoảng facebook, người dùng có thể đăng nhập chỉ với 1 hay 2 cú click chuột, vô cùng thuận tiện.
Một điều khá ngạc nhiên là, khi chúng tôi tìm hiểu về bộ SDK của facebook, ngôn ngữ Java chỉ có 3 bộ SDK Java, 1 bộ cho Spring, 1 bộ cho Android, 1 bộ cho Black Berry. Hoàn toàn không có một bộ SDK nào hỗ trợ ứng dụng J2EE thông thường (Trái ngược với PHP, bộ SDK Facebook cho ngôn ngữ PHP tương đương đơn giản, dễ sử dụng).
[https://developers.facebook.com/docs/sdks/](https://developers.facebook.com/docs/sdks/)
Vì lẽ đó, chúng tôi viết bài hướng dẫn này giúp quý vị hiểu rõ cơ chế authencation của facebook. Qua đó, quý vị có thể viết chức năng này không cần dùng SDK, cũng như mở rộng ra các ngôn ngữ khác.
Bài viết có tham khảo 1 phần cơ chế tại:
[http://saysua.com/2013/09/03/viet-chuc-nang-login-bang-tai-khoan-facebook-khong-dung-facebook-sdk/](http://saysua.com/2013/09/03/viet-chuc-nang-login-bang-tai-khoan-facebook-khong-dung-facebook-sdk/)
(Bài viết trên hướng dẫn viết cho ngôn ngữ PHP, quý vị có thể xem nếu có hứng thú)
**Cơ chế Authencation của facebook**
Khi ứng dụng của bạn muốn truy cập/chỉnh sửa thông tin từ phía người dùng, nó sẽ đưa ra 1 url dẫn tới pop-up, yêu cầu người dùng xác nhận.
Khi người dùng bấm nút “Chấp nhận”, facebook sẽ gửi trả lại ứng dụng 1 chuỗi chữ số gọi là Authorization Code. (
**Cửa sổ trên chỉ hiện 1 lần, nếu user đã đồng ý, facebook sẽ bỏ qua bước này, trả ngay Authorization code**).
Từ Authorization Code này, ta đưa lên server, lấy về 1 access token dưới dạng
**access_token={access-token}&expires={seconds-til-expiration}**
Access Token này được sử dụng để gọi các hàm từ Facebook Graph API.
Quý vị có thể tìm hiểu thêm về Facebook API từ 2 link dưới đây:
**Áp dụng trong ứng dụng J2EE**
Trong trường hợp của chúng ta, chúng ta sử dụng Graph API này để lấy về các thông tin như: Facebook ID, Name, Username… của người dùng
Chúng ta sẽ so sánh Facebook ID với danh sách user trong database. Nếu như chưa có trong database thì ta register, rồi đăng nhập người dùng, nếu đã có dưới database thì chúng ta đăng nhập thẳng người dùng.
Diagram của quá trình login, nếu như user đã accept, bước 3,4 sẽ được bỏ đi, thay vào đó facebook sẽ trả thẳng Authorization code tới ứng dụng.
**Xây dựng ứng dụng**
Để thực hiện chức năng login bằng facebook, đầu tiên chúng ta cần tạo 1 ứng dụng trên facebook. Quý vị vào trang web sau đây:
[https://developers.facebook.com/apps/](https://developers.facebook.com/apps/) **Bước 4 là bước quan trọng, quý vị nhớ chọn tên phù hợp cho ứng dụng của mình.**
Đây là cửa sổ sau khi tạo ứng dụng
Quý vị nhớ bổ sung localhost vào app domain và site url. Ghi lại AppID và AppSecret để sử dụng trong ứng dụng.
Tiếp theo, chúng ta sẽ xây dựng 1 ứng dụng đơn giản cho phép login bằng facebook.
Database của ứng dụng chỉ có 1 bảng như phía dưới. Tôi đặt tên database là SimpleFacebookLogin
Password được phép null vì user có thể đăng nhập bằng facebook. FacebookID – ID của Account FB đăng nhập là 1 chuỗi số gồm 15 chữ số, tuy nhiên do chúng ta không có nhu cầu cộng trừ nhân chia hay so sánh nên ta lưu dưới dạng char(15).
Chúng ta bắt đầu tạo Web Application:
Chúng ta cần 2 bộ thư viện:
Gson 2.2.4:
[http://code.google.com/p/google-gson/downloads/list](http://code.google.com/p/google-gson/downloads/list)
Apache HttpComponent bản 4.3.1:
[http://hc.apache.org/downloads.cgi](http://hc.apache.org/downloads.cgi)
Giải nén các file zip. Tạo thư mục lib, copy những file đó vào thư mục lib trong project, add library những file sau:
Quý vị cũng nhớ add thư viện sqljdbc4.jar để kết nối tới database.
Danh sách các thư viện sau khi add.
Ta tạo class DTO với những field sau
Đoạn annotation để mapping từ json vào object cho đúng field (JSON facebook trả về, có field id là id của tài khoản facebook, ta map field này vào field facebookID của object). Quý vị nhớ tạo get,set cho các field.
Tiếp tục viết hàm DBUtils. Để đơn giản, chúng tôi để connection string tĩnh trong code (
**để kết nối động, quí vị tham khảo lại bài** **Tạo kết nối động đến DB trong mô hình MVC Pattern trên Web Server (Tomcat)**)
Chương trình của chúng ta cho phép đăng kí, đăng nhập bình thường và đăng kí, đăng nhập bằng facebook, do đó chúng ta cần 4 method
Tiếp theo là register và login theo thông tin từ account facebook
Chúng ta viết thêm 1 class NetUtils, giúp đơn giản hóa việc kết nối và nhận dữ liệu từ Web
Hàm này nhận url, kết nối tới web và trả kết quả về dưới dạng String
Cấu trúc project hiện tại.
Chúng ta tạo 1 ứng dụng login bình thường, với chức năng login, register.
Ta tạo thêm 2 file jsp: register.jsp và logined.jsp
Quý vị nhớ add thêm thư viện JSTL để hỗ trợ taglib
Hàm if để phân biệt giữa user thường và user login bằng facebook
Ta tạo AccountServlet
Ở đây vì name ta cho phép nhập tiếng Việt nên phải sửa lại encode để hiển thị đúng
Clean & Build. Deploy ta có:
Bấm “here” để qua trang Register, nhập thông tin rồi bấm register
Đăng nhập sai
Đăng nhập đúng
Chúng ta đã hoàn thành bước đầu trong việc tạo lập login ứng dụng facebook. Hẹn gặp lại các bạn vào phần 2 của bài giảng cũng như những bài về
[ khác lập trình java ](http://chophanmem.com.vn/category/hoc-lap-trinh/ngon-ngu-java/)
The post
[Lập trình java – Login Application sử dụng Facebook (phần 1)](http://chophanmem.com.vn/lap-trinh-java-login-application-su-dung-facebook-phan-1/) appeared first on [.](http://chophanmem.com.vn)
The post
[Hạo thiên online – Siêu phẩm bom tấn](http://chophanmem.com.vn/hao-thien-online-sieu-pham-bom-tan/) appeared first on [.](http://chophanmem.com.vn)
Phiêu bạt ngang dọc khắp giang hồ, giới anh hùng luôn tâm khảm “Hữu duyên thiên lý năng tương ngộ, vô duyên đối diện bất tương phùng”.
Mỗi người sinh ra đều có duyên tiền kiếp, gặp nhau là duyên, PK cũng là duyên. Cũng nói rằng “không đánh không là bạn”, bởi vậy, những người có duyên sẽ tự tìm đến nhau trong thế giới Hạo Thiên.
Hệ thống 4 server với 3 quốc gia trên một server, một cộng đồng lớn mạnh chưa từng có, từ đồng xanh mênh mông đến làng mạc đơn sơ, luôn có những con người sát cánh bên bạn.
The post
[Hạo thiên online – Siêu phẩm bom tấn](http://chophanmem.com.vn/hao-thien-online-sieu-pham-bom-tan/) appeared first on [.](http://chophanmem.com.vn)
The post
[Khu vườn địa đàng](http://chophanmem.com.vn/khu-vuon-dia-dang/) appeared first on [.](http://chophanmem.com.vn)
Nơi mà bạn có thể
**Trồng Cây, Nuôi Chim**, Kết bạn để tìm **Gấu**.Trước tiên bạn phải chăm sóc, tưới nước, thu hoạch cây trồng để kiếm gold để nâng câp chậu, tầng mây, mua Avatar, đồ trang trí thật đẹp trang hoàng cho khu vườn của mình.
Bạn có thể làm Nhiệm Vụ hàng ngày, Nhiệm Vụ chính thống để kiếm Gold và phần thưởng hấp dẫn.
**Khu Giải Trí**
Khu giải trí là nơi ăn chơi, tán gẫu và kén Gấu. Bạn có thể chơi Game Tiến Lên để tiêu khiển xả stress.
Chơi trò tính toán như: Phỏm, Caro… Trò Đại Gia là Xì Tố.Hoặc chơi Quay Số để lấy Thẻ Cào và đồ đẹp để có tiền nhắn tin và tặng đồ cho gấu.
Tại Bàn chơi bạn có thể Chát Chít Tán Gẫu, Xem Avatar và Thông tin Gấu.
Nếu đã tìm được một em Gấu ứng ý, bạn có thể qua khu Vườn Tình Yêu để kết hôn với Gấu.
**Vườn Tình Yêu**
Để vào được Vườn Tình Yêu bạn phải kết hôn với Gấu.Trước tiên bạn phải “Nhập Tên Gấu” gửi lời mời kết hôn đến Gấu.
Nếu Gấu “Đồng Ý” bạn và gấu có thể vào Vườn Tình Yêu chăm sóc tổ ấm của mình thôi !
Trồng hoa, nuôi thiên thần, trang trí vườn kêu gọi bạn bè mình Like, đua top Ring quà đôi độc như: Áo Đôi, Đồng Hồ đôi …
**Vườn Cảnh Vệ**
Vào một ngày đẹp trời Bạn và Gấu đang nằm thả hồn mơ mộng bỗng đâu đó xuất hiện hàng loạt quái thú tấn công khu vườn.
Bạn và Gấu phải làm gì ? Hãy xây dựng một khu Vườn Cảnh Vệ để chống bọn quái thú gian ác phá hoại mùa màng.
Cũng khá vất vả và gian nan bạn phải: Đặt chậu, trồng hoa.. cường hóa hoa thật mạnh để có thể bắn hạ những con thú hung ác.
Chúc Bạn và Gấu bảo vệ được tổ ấm của mình và có một Vườn Địa Đàng thật đẹp !
The post
[Khu vườn địa đàng](http://chophanmem.com.vn/khu-vuon-dia-dang/) appeared first on [.](http://chophanmem.com.vn)
The post
[Memory Clean – Android – DDL](http://chophanmem.com.vn/memory-clean-android-ddl/) appeared first on [.](http://chophanmem.com.vn)
Bạn cảm thấy thất vọng với điện thoại Android đi chậm? Hoặc nó không làm việc nhanh hơn sau khi sử dụng với các ứng dụng nhiều hơn?Bộ nhớ RAM sạch là công cụ để xóa bộ nhớ RAM của bạn và tăng cường thiết bị của bạn và giải phóng không gian bộ nhớ RAM hơn để thực hiện các ứng dụng khác nữa.
Nó không phải là nhiệm vụ kẻ giết người, công tác quản lý hoặc không giết bất kỳ dịch vụ hoặc không ảnh hưởng đến các ứng dụng khác của bạn, Nó chỉ cần làm sạch bộ nhớ RAM của bạn.
Một số ứng dụng trong điện thoại của bạn sử dụng thêm RAM cho thực hiện và có nhiều bộ nhớ của nó mà thực sự không sử dụng cho các ứng dụng, Vì vậy, người dùng có một tùy chọn để xóa bộ nhớ ứng dụng được chọn.
Tính năng ứng dụng:
• Tăng tốc độ điện thoại của bạn
• Làm cho nhiều không gian bộ nhớ RAM cho các ứng dụng khác để thực hiện.
• bộ nhớ không cần thiết sạch
• Đơn giản giao diện người dùng, dễ sử dụng
• thực hiện RAM Progressive
• Đó là miễn phí
New tính năng bổ sung
• Chúng tôi thêm đơn vòi RAM phụ tùng bộ nhớ sạch hơn. Bạn có thể tìm thấy nó trong ứng dụng tiện ích của bạn.
• Chúng tôi bổ sung thêm bộ nhớ RAM tự động làm sạch,
-Đó Là tự động loại bỏ số lượng lớn khi RAM của bạn rất nhiều tải.
-Khi bộ nhớ có sẵn RAM còn lại ít hơn 10% bộ nhớ RAM sạch và tăng tốc điện thoại của bạn
Phiên bản 1.3
sửa chữa -bug
chủ đề -Tùy
Kích thước ứng dụng -Giảm
The post
[Memory Clean – Android – DDL](http://chophanmem.com.vn/memory-clean-android-ddl/) appeared first on [.](http://chophanmem.com.vn)

Server: Apache

X-Robots-Tag: noindex,follow

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Type: application/atom+xml; charset=UTF-8