Profile
The Android client is divided into four sections of user,httputil,httpcallbacklistener,mainactivity. The user model is the same as the server, on the one hand, the storage model for local user information, and the same key used to construct the URL.
Httputil encapsulates the process of sending HTTP requests and the function of constructing URLs, Httpcallbacklistener is the callback interface for sending requests, and mainactivity is the activity interaction interface for testing.
User model
No more post, see previous Android client interacts with server for data interaction (one, Android client)
Httpcallbacklistener
The callback interface defines two functions, one of which is the callback at the normal end of the onfinish, and the onerror when an exception occurs.
//请求回调接口publicinterface HttpCallbackListener { void onFinish(String response); void onError(Exception e);}
Httputil
Httputil is an HTTP tool class that has been encapsulated for two times, including the Sendhttprequest function that sends HTTP requests, the Geturlwithparams function for assembling URLs, and the network status check function.
The assembled URL looks like this, "http://www.baidu.com?username=codingma&password=123456."
Public class httputil { //Package send request function Public Static void sendhttprequest(FinalString address,FinalHttpcallbacklistener listener) {if(! Httputil.isnetworkavailable ()) {//write the corresponding network settings processing here return; }NewThread (NewRunnable () {@Override Public void Run() {HttpURLConnection connection =NULL;Try{URL url =NewURL (address);//Use HttpURLConnectionConnection = (httpurlconnection) url.openconnection ();//Setup methods and ParametersConnection.setrequestmethod ("GET"); Connection.setconnecttimeout (8000); Connection.setreadtimeout (8000); Connection.setdoinput (true); Connection.setdooutput (true);//Get return resultsInputStream InputStream = Connection.getinputstream (); BufferedReader reader =NewBufferedReader (NewInputStreamReader (InputStream)); StringBuilder response =NewStringBuilder (); String Line; while(line = Reader.readline ())! =NULL) {response.append (line); }//Success Callback OnFinish if(Listener! =NULL) {Listener.onfinish (response.tostring ()); } }Catch(Exception e) {E.printstacktrace ();//Unexpected exception callback OnError if(Listener! =NULL) {Listener.onerror (e); } }finally{if(Connection! =NULL) {connection.disconnect (); }}}). Start (); }//Assemble the full URL with parameters Public StaticStringGeturlwithparams(String address,hashmap<string,string> params)throwsunsupportedencodingexception {//Set encoding FinalString encode ="UTF-8"; StringBuilder URL =NewStringBuilder (address); Url.append ("?");//Key,value constructs in the map into the URL for(Map.entry<string, String> entry:params.entrySet ()) {Url.append (Entry.getkey ()). Append ("="); Url.append (Urlencoder.encode (Entry.getvalue (), encode)); Url.append ("&"); }//Erase Last &Url.deletecharat (Url.length ()-1);returnUrl.tostring (); }//Determine if the current network is available Public Static Boolean isnetworkavailable(){//Check the network here and add it later return true; }}
Main activity
Mainactivity is the simplest test UI interface, including two input boxes and a button.
The layout is as follows
Layout xml
<?xml version= "1.0" encoding= "Utf-8"?><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:gravity="Center_horizontal|center_vertical" android:orientation="Vertical" Android:paddingbottom="@dimen/activity_vertical_margin" Android:paddingleft="@dimen/activity_horizontal_margin" Android:paddingright="@dimen/activity_horizontal_margin" Android:paddingtop="@dimen/activity_vertical_margin" Tools:context="Com.pku.codingma.zhisms.ui.loginAndRegister.LoginActivityFragment" Tools:showin="@layout/activity_main"> <linearlayoutandroid:layout_width="Match_parent"android:layout_height ="Wrap_content"android:orientation="Horizontal"> <textview android:layout _width = "0DP" android:layout_height =< Span class= "Hljs-value" > "wrap_content" android:text =" mobile phone number: " android:inputtype =" phone "
android:layout_weight = "1" /> <EditTextandroid:id="@+id/phonenumberedittext"android:layout_width= "0DP" android:layout_height="Wrap_content"android:layout_weight="5"/> </linearlayout> <linearlayoutandroid:layout_width="Match_parent"android:layout_height ="Wrap_content"android:orientation="Horizontal"> <TextViewandroid:layout_width="0DP"android:layout_height= "Wrap_content" Android:text="Password:"android:layout_weight="1"/> <EditTextandroid:id="@+id/passwordedittext"android:layout_width= "0DP" android:layout_height="Wrap_content"android:inputtype="Textpassword" Android:layout_weight="5"/> </linearlayout> <buttonandroid:id="@+id/loginbutton"android:layout_width="Match _parent "android:layout_height=" Wrap_content "android:layout_margintop=" 12DP "android:background=" @color/colorprimarydark "android:text=" Login " /> </linearlayout>
Mainactivity
Mainactivity first takes the username and password from the input box and constructs the HashMap. Then pass it into the Httputil.geturlwithparams function, construct the complete URL, then use Httputil.sendhttprequest to send the request, and define what the callback interface will do (that is, issue a message). Finally, the corresponding processing is made according to the request return result through the handler and message mechanism.
Public class mainactivity extends appcompatactivity implements View . Onclicklistener { PrivateEditText Mphonenumberedittext;PrivateEditText Mpasswordedittext;PrivateButton Mloginbutton;//The URL address of the servlet used to receive the HTTP request, please define it yourself PrivateString originaddress ="Http://localhost:8080/Server/servlet/LoginServlet";//handler for handling messagesHandler Mhandler =NewHandler () {@Override Public void Handlemessage(Message msg) {Super. Handlemessage (msg); String result ="";if("OK". Equals (Msg.obj.toString ())) {result ="Success"; }Else if("Wrong". Equals (Msg.obj.toString ())) {result ="Fail"; }Else{result = Msg.obj.toString (); } toast.maketext (mainactivity. This, result, Toast.length_short). Show (); } };@Override protected void onCreate(Bundle savedinstancestate) {Super. OnCreate (Savedinstancestate); Setcontentview (R.layout.activity_main); Initview (); Initevent (); }Private void Initview() {Toolbar Toolbar = (Toolbar) Findviewbyid (R.id.toolbar); Setsupportactionbar (toolbar); Mphonenumberedittext = (EditText) Findviewbyid (R.id.phonenumberedittext); Mpasswordedittext = (EditText) Findviewbyid (R.id.passwordedittext); Mloginbutton = (Button) Findviewbyid (R.id.loginbutton); }Private void initevent() {Mloginbutton.setonclicklistener ( This); } Public void Login() {//Check the legality of user-entered account and password if(!isinputvalid ()) {return; }//Construction HashMaphashmap<string, string> params =NewHashmap<string, string> (); Params.put (User.phonenumber, Mphonenumberedittext.gettext (). toString ()); Params.put (User.password, Mpasswordedittext.gettext (). toString ());Try{//Construct full URLString Compeletedurl = Httputil.geturlwithparams (originaddress, params);//Send requestHttputil.sendhttprequest (Compeletedurl,NewHttpcallbacklistener () {@Override Public void onfinish(String response) {Message message =NewMessage (); Message.obj = response; Mhandler.sendmessage (message); }@Override Public void OnError(Exception e) {Message message =NewMessage (); Message.obj = E.tostring (); Mhandler.sendmessage (message); } }); }Catch(Exception e) {E.printstacktrace (); } }Private Boolean Isinputvalid() {//Check the legality of user input, here is the default user input legal return true; }@Override Public void OnClick(View v) {Switch(V.getid ()) { CaseR.id.loginbutton:login (); Break; } }}
Summarize
The android side is slightly more complicated, involving HTTP request sending, callback interface, some validity check, handler message mechanism and so on. However, they are the most basic level of use and should not be difficult to understand.
I hope this article will help the novice, while I myself in the process of writing also have a deeper experience.
Reprint please specify the source http://blog.csdn.net/u012145166/article/details/51334688
Download the source code, please poke here
The Android client interacts with the server for data (two, login client)