Replies from Base
เพิ่ม
public class XXXXX extends XXXXXAdapter {
@Override
getCount(){
return XXXX; // จำนวน items ทั้งหมด
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Layout ของแต่ละ items ที่ มี Bottom ฯลฯ
return view;
}
}
ตอนเลือก list view เราก็รู้ว่าเรา เลือก list อันไหน เราจำมันไว้ แล้วตอนเรากลับมาที่ listview เราก็ใช้ คำสั่ง
// POSITION คือ POSITION ของ listview ที่เราจำมันไว้
view.getFocusables(POSITION);
view.setSelected(true);
แค่นี้ ก็ เรียบร้อยครับ
??
ูู^^
มันหาไม่เจอได้ ไง เพราะว่า httpClient (DefaultHttpClient) มันเป็น library ของ Android เลยนะ
มันอยู่ ใน package org.apache.http.impl.client; หรือว่า คุณ import อะไรมาผิดหรือเปล่า ครับ
ลองๆๆ ใหม่ สู้ต่อ
ผมรู้ไงว่าคุณ ใช้ ksoap2 for android ครับ แต่ผมแนะ วิธีการที่หนึง วิธีที่สอง ผม ก็ไกด์ ให้แล้วไง ครับ ลองๆๆ ทำเองก่อน เนอาะ สู้ๆๆ รับรองวิธีการทีสอง ( Call WebService by ksoap2 for Android) ทำได้ แน่นอน ^^
อ่อ อันนี้ คุณต้อง SSL Certificate Verify ของ https:// ครับ code ข้ามบนมัน call services แบบ http:// ธรรมดา
ขออธิบายนิดนึง ครับ คือว่า SSL มันเป้น โปรโตคอลความปลอดภัย ที่ถูกใช้เป็นมาตรฐาน ในการเพิ่มความปลอดภัย ในการสื่อสารหรือส่งข้อมูลบนเครือข่ายอินเทอร์เน็ต ที่มีการการเข้ารหัสแบบ Public-key encryption เป็นการเข้ารหัสที่มี key 2 ส่วนคือ public key(http://) และ private key (https://) แค่นี้ผมก็ งง แล้ว
เอาเนื้อๆๆ เลยละกันครับ
จากประสบการณ์ ในการเรียกใช้งาน call web services (ทีผมใช้นะ อาจมีวิธีอืนๆๆ อีก)
1. HttpPost คือ post url ทีต้องการเรียกไปตรงๆๆ เลย( เซียนๆๆ เขาทำกัน เพราะว่าเราจะได้ xml มากแบบ เอาง่าย ผมตกใจเลย ว่ามันจะ return อะไรมาเยอาะ อ่านก็ไม่รู้เรื่อง แน่นอนว่า วิธีนี้ผมไม่ทำแน่นอน ) แล้วเราก็มากนั่ง Parser xml เอาเอง ค่อยข้างจะยุ่งยาก พอสมควร **งานเข้าอีกแล้วดิ
2. ksoap2 for android อันนี้ก็เหมือน วิธีการเหมือนคุณทำด้านบน (แต่คุณดัง call service http:// ธรรมดา ไป call https:// งานก็เลยเข้าคุณเลยดิ) และ เพราะว่ามันจะ return ค่าแบบว่าเราเอาไปใช้ได้เลย
อันอย่างนี้ แล้วกันคุณจะได้ เรียนรู้ไปด้วย เดียวผมจะให้ source code วิธีที 1 คุณไป
// การ Call แบบ Https Debug ดูค่าที่มัน return กลับมานะครับ หัดใช้งาน Debug ด้วย
private void callWebServicesHttps(){
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
// registry.register(new Scheme(“https”, socketFactory, 443));
registry.register(new Scheme(“https”, new EasySSLSocketFactory(), 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// Example send http request
final String url = “ใส่ url https:// ตรงนี้นะครับ”;
HttpPost httpPost = new HttpPost(url);
try {
HttpResponse response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
Log.e(“tag”, “msg”);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e(“tag”, “msg”);
}
ผมไม่กัก นะครับ เพราะคุณจะได้เรียนรู้ไปด้วย
แนะแนวทางแล้วกัน ของวิธีการที่สอง ต้อง เขียน code HostnameVerifier แค่นะครับ ^^
อันนี้เดา เอานะครับ คุณ disable checkbox ไว้หรือเปล่า มันแย่งได้ สอง กรณีนะครับ คือ 1. disable checkbox ไว้แล้วกดยังไงก็กดไม่ได้ (แน่นอน อันนี้กดจนหน้าจอพัง ก็ไม่ได้ ** ล้อเล่น) 2. click checkbox แล้วมันไม่เกิดอะไรขึ้นเลย คือ enable มันแล้วกดไม่ได้ (อันนี้ไม่รู้จิงๆๆ ครับ กรณีนี้ต้องแจ้ง บั๊กให้ google รู้แล้วและครับ เพราะว่า checkbox มันเป้น standard component จิงๆๆ มันไม่ควรแบบนี้ขึ้นเลย อันนี้ก็ล้อเล่น อีกและ ขําๆๆ ครับ)
ช่วงนี้ งานผมยุ่งๆๆ อยู่ อีกไม่เกิม 2 วันถ้ายังไม่ได้ เดียวมาช่วยตอบ นั้นรบกวนคุณแยกส่วน ของ Multi-Checkbox มาเป้น app เล็กๆๆ (แบบรันได้ นะ) เดียวผมช่วยแก้ให้ ส่งเข้า android.somkid@gmail.com
^^
หรือถ้า ( simple_list_item_multiple_choice.xml )มันมีปัญหาจริง อันนีผมก็ไม่รู้เหมือนกัน นะ)คุณก็สร้าง layout item(layout ของแต่ละ item โดยสร้าง class XXX Extend Adapter {
@Override // เปลียม layout item ตรงนี้นะครับ
public View getView(int position, View convertView, ViewGroup parent){
View view = mInflater.inflate(R.layout.my_list_custom_row( layout ของเรา), parent, false);
/********* กำหนดของ sub item { คือ อะไรที่อยู่ใน layout ของ ลอง set ค่าอะไรให้มันก็ได้ ลองๆๆ ดู ูู^^} **********/
}
})
แล้วก็ เราต้อง กำหนดให้ listview ของเราเป็น CHOICE_MODE_MULTIPLE โดย
ListView( listview ของเรานะ).setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
เส็จ เราจะรู้ได้ไง ว่าเราเลือก item อันไหนบ้าง
โดยใช้
int len = listView.getCount();
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < len; i++) if (checked.get(i)) { String item = cont_list.get(i); /* do whatever you want with the checked item */ } ประมาณนี้และครับ ููู ^^
ลองดูตัวอย่างนี้ ครับ
http://appfulcrum.com/2010/09/12/listview-example-3-simple-multiple-selection-checkboxes/
ไม่ยากเท่าไร ครับ ^^
^^
ขอตอบแบบคนไม่รู้แล้วกันนะครับ
ส่วนมากที่เกิด Memory Leak
1. จะเป็นกับพวก Image file คุณลองทำความเข้าใจ มันดีๆคับ พวก Activity Lift Cycle
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
ถ้าคุณใช้ ทดสอบบนเครื่องจิง แล้วลองให้มันโหลด image file ใหญ่ขึ้นมาแสดง ลอง พลิกเครื่อง (แนวตั้ว แนวนอน) ลองเช็ดดูว่า memory ที่ใช้มันจะเพิ่มขึ้นไปเริ่มๆๆ หรือเปล่า ? ลองๆๆดูนะครับ
^^
Ohh ! อันนี้ที่เคยรู้มายาวเลยครับ(หนักนะครับ) มองง่าย QR Droid for Android มียอดดาวก์โหลด สิบล้านกว่าดาวก์โหลดเลยครับ ***คิดเล่นๆๆ ถ้าคิดจะขายโฆษณาผมว่ารวยเห็นๆ เลย
ผมว่าทำได้และครับ
สู้ๆๆ ครับคนไทยไม่แพ้ชาติใดในโลก ถ้าทำได้เดียวผมคนหนึ่งแล้วจะช่วยใช้ครับ ^^