android的互联网开发 上
一、java socket编程的介绍http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 二、URL、UrlConnection网络编程介绍 三、HTTP网络编程介绍 http协议-简介http协议-C#获取网页源代码http协议-多线程文件传输 四、 Web Service网络编程介绍 五、 android WebView网络编程介绍 实例代码----------------------------------------------- 服务器端模拟 MyServer.java packagecom.amaker.socket; importjava.io.IOException; importjava.io.OutputStream; importjava.net.ServerSocket; importjava.net.Socket; /** * *Socket服务器,向客户端写HelloAndroid! */ publicclassMyServer{ publicstaticvoidmain(String[]args){ try{ ServerSocketserver=newServerSocket(8888); while(true){ Socketclient=server.accept(); OutputStreamout=client.getOutputStream(); Stringmsg="HelloAndroid!"; out.write(msg.getBytes()); client.close(); } }catch(IOExceptione){ e.printStackTrace(); } } } LoginServlet.java packagecom.amaker.http; importjava.io.IOException; importjava.io.PrintWriter; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; /** * *响应登录Servlet */ publicclassLoginServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); System.out.println(username+":"+password); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriterout=response.getWriter(); Stringmsg=null; if(username!=null&&username.equals("admin")&&password!=null&&password.equals("1")){ msg="登录成功!"; }else{ msg="登录失败!"; } out.print(msg); out.flush(); out.close(); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.amaker.http.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> </web-app> android客户端 MainActivity.java packagecom.amaker.ch13; importandroid.app.ListActivity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ArrayAdapter; importandroid.widget.ListView; importcom.amaker.ch13.http.LoginActivity; importcom.amaker.ch13.socket.TestSocketActivity; importcom.amaker.ch13.url.TestURLActivity; importcom.amaker.ch13.webservice.TestWebServiceActivity; importcom.amaker.ch13.webservice.WeatherActivity; importcom.amaker.ch13.webview.TestWebViewActivity; publicclassMainActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //菜单项数组 String[]items={"测试Socket","测试URL、UrlConnection","测试HTTP","测试WebService","天气预报","TestWebView"}; //将菜单项数组设置为ListView的列表项展示 setListAdapter(newArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items)); getListView().setTextFilterEnabled(true); } //响应菜单项的单击事件 protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ Intentintent=null; switch(position){ case0: intent=newIntent(MainActivity.this,TestSocketActivity.class); startActivity(intent); break; case1: intent=newIntent(MainActivity.this,TestURLActivity.class); startActivity(intent); break; case2: intent=newIntent(MainActivity.this,LoginActivity.class); startActivity(intent); break; case3: intent=newIntent(MainActivity.this,TestWebServiceActivity.class); startActivity(intent); break; case4: intent=newIntent(MainActivity.this,WeatherActivity.class); startActivity(intent); break; case5: intent=newIntent(MainActivity.this,TestWebViewActivity.class); startActivity(intent); break; } } } AndroidManifest.xml <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.ch13" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name="com.amaker.ch13.http.LoginActivity"/> <activityandroid:name="com.amaker.ch13.socket.TestSocketActivity"/> <activityandroid:name="com.amaker.ch13.url.TestURLActivity"/> <activityandroid:name="com.amaker.ch13.webservice.TestWebServiceActivity"/> <activityandroid:name="com.amaker.ch13.webservice.WeatherActivity"/> <activityandroid:name="com.amaker.ch13.webview.TestWebViewActivity"/> </application> <uses-sdkandroid:minSdkVersion="3"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permissionandroid:name="android.permission.INTERNET"></uses-permission> </manifest> 一、socket编程 TestSocketActivity.java 代码 packagecom.amaker.ch13.socket; importjava.io.IOException; importjava.io.InputStream; importjava.net.Socket; importjava.net.UnknownHostException; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.TextView; importcom.amaker.ch13.R; /** * *Android Socket客户端接收服务器信息 */ publicclassTestSocketActivityextendsActivity{ privateTextViewmyTextView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.socket); myTextView=(TextView)findViewById(R.id.msgTextView01); try{ Socketsocket=newSocket("192.168.1.101",8888); InputStreamin=socket.getInputStream(); byte[]buffer=newbyte[in.available()]; in.read(buffer); Stringmsg=newString(buffer); myTextView.setText(msg); }catch(UnknownHostExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } } socket.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:text="等待接收服务器信息..." android:id="@+id/msgTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout> 二、URL、UrlConnection编程 TestURLActivity.java 代码 packagecom.amaker.ch13.url; importjava.io.InputStream; importjava.net.URL; importjava.net.URLConnection; importandroid.app.Activity; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.os.Bundle; importandroid.widget.ImageView; importcom.amaker.ch13.R; /** *通过URL进行网络连接 */ publicclassTestURLActivityextendsActivity{ privateImageViewimageView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test_url); imageView=(ImageView)findViewById(R.id.ImageView01); StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/upload/zs.jpg"; try{ URLurl=newURL(urlStr); //1.直接使用URL获得输入流 //InputStreamin=url.openStream(); //2.获得URLconnection URLConnectionconn=url.openConnection(); InputStreamin=conn.getInputStream(); //3.如果是HTTP协议可以使用HttpURLConnection //HttpURLConnectionhttpConn=(HttpsURLConnection)conn; //in=httpConn.getInputStream(); Bitmapbm=BitmapFactory.decodeStream(in); imageView.setImageBitmap(bm); }catch(Exceptione){ e.printStackTrace(); } } } test_url.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView> </LinearLayout> 三、 HTTP编程 LoginActivity.java 代码 packagecom.amaker.ch13.http; importjava.io.UnsupportedEncodingException; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.apache.http.protocol.HTTP; importorg.apache.http.util.EntityUtils; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importcom.amaker.ch13.R; publicclassLoginActivityextendsActivity{ /* *声明使用到的Button和EditText视图组件 */ privateButtoncancelBtn,loginBtn; privateEditTextuserEditText,pwdEditText; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.http1); /* *实例化视图组件 */ cancelBtn=(Button)findViewById(R.id.cancelButton); loginBtn=(Button)findViewById(R.id.loginButton); userEditText=(EditText)findViewById(R.id.userEditText); pwdEditText=(EditText)findViewById(R.id.pwdEditText); /* *设置登录监听器 */ loginBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Stringusername=userEditText.getText().toString(); Stringpwd=pwdEditText.getText().toString(); login(username,pwd); } }); /* *设置取消监听器 */ cancelBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ finish(); } }); } /* *定义一个显示提示信息的对话框 */ privatevoidshowDialog(Stringmsg){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setMessage(msg) .setCancelable(false) .setPositiveButton("确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ } }); AlertDialogalert=builder.create(); alert.show(); } /* *通过用户名称和密码进行查询,发送Post请求,获得响应结果。 */ privatevoidlogin(Stringusername,Stringpassword){ //1.使用HttpURLConnection实现 /*StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/servlet/LoginServlet?"; StringqueryString="username="+username+"&password="+password; urlStr+=queryString; try{ URLurl=newURL(urlStr); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){ InputStreamin=conn.getInputStream(); byte[]b=newbyte[in.available()]; in.read(b); Stringmsg=newString(b); showDialog(msg); in.close(); } conn.disconnect(); }catch(Exceptione){ showDialog(e.getMessage()); }*/ //2.使用ApacheHTTP客户端实现 StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/servlet/LoginServlet"; HttpPostrequest=newHttpPost(urlStr); //如果传递参数个数比较多的话,我们可以对传递的参数进行封装 List<NameValuePair>params=newArrayList<NameValuePair>(); params.add(newBasicNameValuePair("username",username)); params.add(newBasicNameValuePair("password",password)); try{ request.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponseresponse=newDefaultHttpClient().execute(request); if(response.getStatusLine().getStatusCode()==200){ Stringmsg=EntityUtils.toString(response.getEntity()); showDialog(msg); } }catch(Exceptione){ e.printStackTrace(); } } } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1079279