[[ÊÙ¶¯²ñ]] * Android¤Çorg.apache.http.client¤ò»ÈÍѤ¹¤ë [#u256e3d3] - ¢¨¸½ºß¥ì¥Ó¥å¡¼Ãæ¤Ç¤¹¡£ÆâÍƤϴְ㤤¤ò´Þ¤ó¤Ç¤¤¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ Android¤ÇHTTP¤ò»ÈÍѤ·¤Æ¥Í¥Ã¥È¥ï¡¼¥¯¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤Ë¤Ï¡¢org.apache.http.client¥Ñ¥Ã¥±¡¼¥¸¤Î¥¯¥é¥¹¤ò»ÈÍѤ·¤Þ¤¹¡£ ¤¿¤À¤·¡¢»È¤¤¤³¤Ê¤¹¤¿¤á¤Ë¤ÏHTTP¥×¥í¥È¥³¥ë¤ò¿¾¯Íý²ò¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¡¢Æȼ«¤Ë¥Ø¥Ã¥À¡¼¤òÀßÄꤹ¤ë¤Ê¤É¡¢Æüì¤Ê»È¤¤Êý¤ò¤¹¤ë¤Î¤Ç¤Ê¤±¤ì¤Ðorg.apache.http.client¤òľÀÜÁàºî¤¹¤ëɬÍפϤ¢¤Þ¤ê¤¢¤ê¤Þ¤»¤ó¡£ ¤³¤³¤Ç¤ÏandroidÍѤΥ桼¥Æ¥£¥ê¥Æ¥£¤È¤·¤Æ¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ç¸ø³«¤µ¤ì¤Æ¤¤¤ëRestfulClient¥¯¥é¥¹¤ò»ÈÍѤ·¡¢HTTP¤ÎGET¥á¥½¥Ã¥É¤ò»È¤Ã¤Ægoogle¤Ë¸¡º÷¥¯¥¨¥ê¤òÅꤲ¤Æ·ë²Ì¤òHTML¤Ç¼õ¤±¼è¤Ã¤Æ¤ß¤¿¸å¡¢RestfulClient¥¯¥é¥¹Æâ¤ÎÆ°ºî¤òÄɤäƤߤޤ·¤ç¤¦¡£ ** ¼ê½ç1¡§¸ø³«¤µ¤ì¤Æ¤¤¤ëandroidÍѤΥ桼¥Æ¥£¥ê¥Æ¥£¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢Eclipse¤ËÅÐÏ¿¤¹¤ë [#y8f39253] - ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ÏGitHub¤È¤¤¤¦¥µ¡¼¥Ó¥¹¤ò»È¤Ã¤Æ¸ø³«¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢[[GitHub¾å¤Îandroid_utils¥×¥í¥¸¥§¥¯¥È:http://github.com/maimuzo/android_utils/tree/master]]¤ò³«¤¡¢download¥Ü¥¿¥ó¤«¤éZip¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ ([[Git:http://www21.atwiki.jp/yasuaki_n/pages/12.html]]¤ò»È¤¨¤ë¿Í¤Ïgit clone¤·¤Æ¤â¤é¤Ã¤¿Êý¤¬º£¸å³Ú¤«¤â¤·¤ì¤Þ¤»¤ó) #ref(httpclient.download_from_github.jpg) - Eclipse¤ò³«¤ "File -> Import"¤òÁªÂò¤·¤Þ¤¹¡£ - "General¤ÎÃæ¤ÎExisting Projects into workspace"¤òÁªÂò¤·¤Æ¡¢"Next"¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ #ref(httpclient.Importtype.jpg) - ¥À¥¦¥ó¥í¡¼¥É¤·¤¿Zip¥Õ¥¡¥¤¥ë(¤â¤·¤¯¤Ïgit clone¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê)¤«¤é¡¢°Ê²¼¤Î¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Î¤è¤¦¤Ëandroid_utils¥×¥í¥¸¥§¥¯¥È¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£°ì½ï¤Ëandroid_util_tests¥×¥í¥¸¥§¥¯¥È¤â¥¤¥ó¥Ý¡¼¥È¤·¤Æ¤ª¤¤¤¿Êý¤«¸å¡¹³Ú¤«¤âÃΤì¤Þ¤»¤ó¡£ #ref(httpclient.ImportFrom.jpg) - Eclipse¤Ë¥×¥í¥¸¥§¥¯¥È¤¬¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤¹¡£ ** ¼ê½ç2¡§¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤·¤ç¤¦ [#d831cd13] google¤Ë¸¡º÷¥¯¥¨¥ê¤òȯ¹Ô¤¹¤ë¤¿¤á¤Î¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£ - "File -> New -> Project"¤òÁªÂò¤·¤Æ¡¢³«¤¤¤¿¥À¥¤¥¢¥í¥°¤Ç"Android Poroject"¤òÁªÂò¤·¤Æ¡¢"Next"¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ - ³«¤¤¤¿¥À¥¤¥¢¥í¥°¤Ç¡¢°Ê²¼¤Î¤è¤¦¤ËÆþÎϤ·¤ÆFinish¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ -- Project Name: HelloHTML -- Package name: net.it4myself.hellohtml -- Activity Name: .HelloHTML -- Application Name: ¥Ï¥í¡¼HTML ** ¼ê½ç3¡§¥Þ¥Ë¥Õ¥§¥¹¥È¥Õ¥¡¥¤¥ë¤òÀßÄꤹ¤ë [#q3055b2a] - ¤³¤Î¥×¥í¥¸¥§¥¯¥È¤Ç¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¡¢¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤Î»ÈÍѤòµö²Ä¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ - ¤â¤¦´·¤ì¤Þ¤·¤¿¤Í?¡¡¥½¡¼¥¹¤À¤±Å½¤Ã¤Æ¤ª¤¤Þ¤¹¡£ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.it4myself.hellohtml" android:versionCode="1" android:versionName="1.0.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloHTML" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET"/> </manifest> ** ¼ê½ç4¡§¥ì¥¤¥¢¥¦¥È¤ò·èÄꤹ¤ë [#tae13375] ²èÌ̤Υ쥤¥¢¥¦¥È¤ò·èÄꤹ¤ë¤¿¤á¤Ë¡¢res/layout/main.xml¤òÊÔ½¸¤·¤Þ¤·¤ç¤¦¡£ - ¤³¤ì¤âº£²ó¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Î¼ñ»Ý¤«¤é³°¤ì¤ë¤Î¤Ç¡¢¥½¡¼¥¹¤À¤±Å½¤Ã¤Æ¤ª¤¤Þ¤¹¡£ - ¤Á¤Ê¤ß¤Ë[[DroidDraw:http://droiddraw.org/]]¤Çºî¤Ã¤¿¤â¤Î¤Ç¤¹¡£¤Á¤Ê¤ß¤Ë¤Á¤Ê¤ß¤Ë¡¢¥¹¥¿¥ó¥É¥¢¥í¡¼¥óÈǤÎÊý¤¬¹âµ¡Ç½¤Ç¤¹! <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Query String" > </TextView> <EditText android:id="@+id/query_text" android:layout_width="200px" android:layout_height="wrap_content" android:text="EditText" android:textSize="18sp" > </EditText> <Button android:id="@+id/search_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="search" > </Button> </LinearLayout> <TextView android:id="@+id/html_source" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="TextView" > </TextView> </LinearLayout> ** ¼ê½ç5¡§¼ê½ç1¤Çºî¤Ã¤¿¥×¥í¥¸¥§¥¯¥È¤ò¥Ó¥ë¥É¥Ñ¥¹¤Ë²Ã¤¨¤ë [#b1c146e4] ÊÌ¤Î¥×¥í¥¸¥§¥¯¥ÈÆâ¤Ë¤¢¤ë¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥Ó¥ë¥É¥Ñ¥¹¤ÎÀßÄê¤ò¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ò˺¤ì¤Æ¤·¤Þ¤¦¤È¡¢net.it4myself.util.RestfulClient¥¯¥é¥¹¤Ï»ÈÍѤǤ¤Þ¤»¤ó¡£ - HelloHTML¥×¥í¥¸¥§¥¯¥È¾å¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Æ¡¢"Properties"¤òÁªÂò¤·¤Þ¤¹ - ɽ¼¨¤µ¤ì¤¿¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤Ç"Java Build Path"¤òÁªÂò¤·¤Þ¤¹(¡) - "Projects"¥¿¥Ö¤òÁªÂò¤·¤Þ¤¹(¢) - "Add..."¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¡¢"android_utils"¥×¥í¥¸¥§¥¯¥È¤òÁªÂò¤·¤Þ¤¹(£) - "android_utils"¤¬Äɲ䵤줿¤³¤È¤ò³Îǧ¤·¤Þ¤¹(¤) - OK¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÀßÄê¤ò´°Î»¤·¤Þ¤¹(¥) #ref(httpclient.add_build_path.jpg) ** ¼ê½ç6¡§Get¥á¥½¥Ã¥É¤ò»È¤Ã¤Ægoogle¸¡º÷·ë²Ì¤ò¼èÆÀ¤¹¤ë [#l6f71ed0] - src¤Î²¼¤Înet.it4myself.hellohtml¤ÎHelloHTML.java¤ò³«¤¤¤Æ°Ê²¼¤Î¤è¤¦¤ËÆþÎϤ·¤Þ¤¹¡£ - °Ê²¼¤Î¥³¡¼¥É¤Ç¤Ï¡¢°Ê²¼¤Î¼ê³¤¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£ -- search_button¥Ü¥¿¥ó¤ÎOnClickListner¤Ë°Ê²¼¤Î¥¤¥Ù¥ó¥È¤ò»Å¹þ¤à --- "http://www.google.com/search?q="¤Èquery_text¥¨¥Ç¥£¥Ã¥È¥Æ¥¥¹¥È¤ÎÆþÎÏÆâÍƤòÏ¢·ë¤µ¤»¡¢¥¢¥¯¥»¥¹¤¹¤ëURL¤òÀ¸À®¤¹¤ë --- RestfulClient.Get()¤ò¸Æ¤Ö¡£Âè°ì°ú¿ô¤ÏURL¡£ÂèÆó°ú¿ô¤Ï¥Ñ¥é¥á¡¼¥¿¤À¤¬¡¢URL¤Ë¥¯¥¨¥ê¡¼¥¹¥È¥ê¥ó¥°¤ò´Þ¤á¤¿¤Î¤Çnull¤È¤·¤Æ¤¤¤ë¡£ --- RestfulClient.Get()¤ÎÊÖÃͤȤ·¤Æ¸¡º÷·ë²Ì¤ÎHTML¤¬Ê֤äƤ¯¤ë¤Î¤Ç¡¢html_source¥Æ¥¥¹¥È¥Ó¥å¡¼¤Ë¥»¥Ã¥È¤¹¤ë¡£ package net.it4myself.hellohtml; import java.io.IOException; import org.apache.http.client.ClientProtocolException; import net.it4myself.util.RestfulClient; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class HelloHTML extends Activity { /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b = (Button)findViewById(R.id.search_button); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { EditText input = (EditText)findViewById(R.id.query_text); TextView html_source = (TextView)findViewById(R.id.html_source); String queryString = "http://www.google.com/search?q=" + input.getText().toString(); try { String html = RestfulClient.Get(queryString, null); html_source.setText(html); } catch (ClientProtocolException e) { e.printStackTrace(); html_source.setText("error1"); } catch (IOException e) { e.printStackTrace(); html_source.setText("error2"); } } }); } } - ¥×¥í¥¸¥§¥¯¥È¤ò±¦¥¯¥ê¥Ã¥¯¤·¤Æ¡¢"Run As"->"Android Application"¤Ç¼Â¹Ô¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£Query¤ÎÆâÍƤ˱þ¤¸¤Æ¡¢É½¼¨¤µ¤ì¤ëHTML¤ÎÆâÍƤ¬°Û¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£ ** RestfulClient.Get()¤ÎÆâÍƤò³Îǧ¤¹¤ë [#tdfd5d90] shared_android_utils¥×¥í¥¸¥§¥¯¥È¤ò³«¤¡¢src¤Î²¼¤Înet.it4myself.util¤ÎRestfulClient.java¤ò³«¤¤¤ÆÆâÍƤò³Îǧ¤·¤Þ¤¹¡£ RestfulClient¥¯¥é¥¹¤Î¾ì¹ç¡¢ÊÖÃͤ¬String¤«DOM¥ª¥Ö¥¸¥§¥¯¥È¤«¤Ë¤è¤Ã¤Æ¥ª¡¼¥Ñ¥í¡¼¥É¤µ¤»¤Æ¤¤¤Þ¤¹¤¬¡¢´ðËÜŪ¤Êή¤ì¤ÏƱ¤¸¤Ç¤¹¡£¤³¤³¤Ç¤Ï´ðËÜŪ¤Êή¤ì¤ò²òÀ⤷¤Þ¤¹¡£ - (A) HTTP¥×¥í¥È¥³¥ë¤ò»È¤Ã¤Æ¥¢¥¯¥»¥¹¤¹¤ë¾ì¹ç¡¢ºÇ¤â´Êñ¤Ê¤Î¤Ïorg.apache.http.impl.client¥Ñ¥Ã¥±¡¼¥¸¤ÎDefaultHttpClient¥¯¥é¥¹¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¤¹¡£DefaultHttpClient¥¯¥é¥¹¤ÏHTTP¥×¥í¥È¥³¥ë¤ËÂбþ¤·¡¢(RestfulClinet¥¯¥é¥¹¤Ç¤Ï»ÈÍѤ·¤Æ¤¤¤Þ¤»¤ó¤¬)SSL¤ä¥Ù¡¼¥·¥Ã¥¯Ç§¾Ú¤Î¤¿¤á¤ÎÀßÄê¤Ê¤É¤ò¹Ô¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡£RestfulClinet¥¯¥é¥¹¤Ç¤ÏDoRequest()¥á¥½¥Ã¥É¤Ç¤³¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Æ¤¤¤Þ¤¹¡£ - (B) ¤³¤ÎDefaultHttpClient¥¯¥é¥¹¤Îexecute¥á¥½¥Ã¥É¤Ë¡¢HttpGet¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤äHttpPost¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÅϤ¹¤³¤È¤Ç¡¢HTTP¥×¥í¥È¥³¥ë¤Î³Æ¥á¥½¥Ã¥ÉÆÃͤÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£RestfulClinet¥¯¥é¥¹¤Ç¤ÏDoRequest()¤Î°ú¿ô¤È¤·¤ÆÅϤäƤ¤Þ¤¹¡£ - (C) DefaultHttpClient¥¯¥é¥¹¤Îexecute¥á¥½¥Ã¥É¤ÎÌá¤êÃͤϡ¢HttpResponse¤Ç¤¹¡£Ìá¤êÃͤ«¤é¤ÏHTTP¥×¥í¥È¥³¥ë¤Î¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É(200 OK¤Ê¤É)¤äInputStream¤ò¼è¤ê½Ð¤»¤Þ¤¹¡£RestfulClinet¥¯¥é¥¹¤Ç¤ÏEntity¤ò¼è¤ê½Ð¤·¡¢¤½¤ì¤òEntityUtils.toString()¤ò»È¤Ã¤Æʸ»úÎ󲽤¹¤ë¤«¡¢getDOM()¥á¥½¥Ã¥ÉÆâ¤ÇXML¤È¤·¤Æ¥Ñ¡¼¥¹¤·¤ÆDOM¥ª¥Ö¥¸¥§¥¯¥È¤ò¼è¤ê½Ð¤·¤Æ¤¤¤Þ¤¹¡£ - ¢¨android ver1.0»þÅÀ¤Ç¤Ïorg.w3c.dom¥Ñ¥Ã¥±¡¼¥¸¤Ï¥Ð¥°¤¬Â¿¤¤¤é¤·¤¯¡¢°ìÉô¥ª¥×¥·¥ç¥ó¤¬Æ°¤¤¤Æ¤¯¤ì¤Ê¤«¤Ã¤¿¤¿¤á¡¢¶õ¥Æ¥¥¹¥È¥Î¡¼¥Éºï½üÍѤËRemoveEmptyNodes()¤âÍÑ°Õ¤·¤Þ¤·¤¿¡£DOM¥ª¥Ö¥¸¥§¥¯¥È¤ò°·¤¤¤¿¤¤¾ì¹ç¤Ï¤ª»È¤¤¤¯¤À¤µ¤¤¡£ »²¹Í¤Ë¥½¡¼¥¹¤âÄ¥¤Ã¤Æ¤ª¤¤Þ¤¹¡£ public static String Get(String uri, HashMap<String,String> map) throws ClientProtocolException, IOException { String fulluri; if(null == map){ fulluri = uri; } else { fulluri = uri + packQueryString(map); } HttpGet method = new HttpGet(fulluri); return EntityUtils.toString(DoRequest(method)); } private static HttpEntity DoRequest(HttpUriRequest method) throws ClientProtocolException, IOException { HttpClient client = new DefaultHttpClient(); // (A) HttpResponse response = null; try { response = client.execute(method); // (B) int statuscode = response.getStatusLine().getStatusCode(); // °Ê²¼(C) //¥ê¥¯¥¨¥¹¥È¤¬À®¸ù 200 OK and 201 CREATED if (statuscode == HttpStatus.SC_OK | statuscode == HttpStatus.SC_CREATED){ return response.getEntity(); } else { throw new HttpResponseException(statuscode, "Response code is " + Integer.toString(statuscode)); } }catch (RuntimeException e) { method.abort(); Log.v(TAG, e.getMessage()); throw new RuntimeException(e); } } ----- [[ÊÙ¶¯²ñ]]