博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓第七天笔记--网络编程一
阅读量:6476 次
发布时间:2019-06-23

本文共 34945 字,大约阅读时间需要 116 分钟。

安卓第七天笔记--网络编程一

 

Android对网络的支持

 

Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,还可以使用DatagramSocket,Datagrampacket,MulticastSocket来建立 基于UDP的协议网络通信

 

同时支持JDK提供的URL,URLConnection等网络通信API.

 

Andoirdgip内置了Apache的HttpClient,这样可以非常方便的发送HTTP请求,并获取HTTP响应.

 

1.Socket实现

服务器

 

package com.itheima.server;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;/** * ServerSocket 服务端* @Decription TODO * @author 刘楠 * * @time2016-2-22下午4:54:59 */public class MyServer {    public static ArrayList
socketList = new ArrayList
(); public static void main(String[] args) { try { //建立serversocket ServerSocket serverSocket = new ServerSocket(25000); //服务器一直在运行状态 while(true){ //开始监听 Socket socket = serverSocket.accept(); socketList.add(socket); //启动新的线程 new ServerThread(socket).start(); } } catch (IOException e) { e.printStackTrace(); } }}/*线程类*/package com.itheima.server;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;public class ServerThread extends Thread { private Socket socket; public ServerThread(Socket socket) throws IOException { //初始化 this.socket = socket; } @Override public void run() { String ip = socket.getInetAddress().getHostAddress(); System.out.println("ip:"+ip); BufferedReader br=null; OutputStream out = null; try { br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); out = socket.getOutputStream(); String content = null; while((content=br.readLine())!=null){ System.out.println("来自客户端:"+content); //手动加上换行 符,不然没客户端收不到 out.write((content+"\n").toUpperCase().getBytes("utf-8")); System.out.println("服务发出去了:"); } out.close(); br.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }}

 

 

 

 

 

 

 

布局文件

 

 

 

 

 

子线程

/** * 线程类 * Created by  刘楠 on 2016-02-22 17:51. */public  class  ClientThread implements  Runnable{    private static final String TAG = "ClientThread";    private Socket s;    // 定义向UI线程发送消息的Handler对象    private Handler handler;    // 定义接收UI线程的消息的Handler对象    public Handler revHandler;    // 该线程所处理的Socket所对应的输入流    BufferedReader br = null;    OutputStream os = null;    public ClientThread(Handler handler)    {        this.handler = handler;    }    public void run()    {        try        {            s = new Socket("192.168.1.103", 25000);            br = new BufferedReader(new InputStreamReader(                    s.getInputStream()));            os = s.getOutputStream();            // 启动一条子线程来读取服务器响应的数据            new Thread()            {                @Override                public void run()                {                    String content = null;                    // 不断读取Socket输入流中的内容                    try                    {                        while ((content = br.readLine()) != null)                        {                            // 每当读到来自服务器的数据之后,发送消息通知程序                            // 界面显示该数据                            Message msg = new Message();                            msg.what = 0x123;                            msg.obj = content;                            handler.sendMessage(msg);                            Log.i(TAG,"服务返回"+content);                        }                    }                    catch (IOException e)                    {                        e.printStackTrace();                    }                }            }.start();            // 为当前线程初始化Looper            Looper.prepare();            // 创建revHandler对象            revHandler = new Handler()            {                @Override                public void handleMessage(Message msg)                {                    // 接收到UI线程中用户输入的数据                    if (msg.what == 0x345)                    {                        // 将用户在文本框内输入的内容写入网络                        try                        {                            //手动加上换行符                            os.write((msg.obj.toString() + "\r\n")                                    .getBytes("utf-8"));                            Log.i(TAG, "输入的" + msg.obj.toString());                        }                        catch (Exception e)                        {                            e.printStackTrace();                        }                    }                }            };            // 启动Looper            Looper.loop();        }        catch (SocketTimeoutException e1)        {            System.out.println("网络连接超时!!");        }        catch (Exception e)        {            e.printStackTrace();        }    }}

 

 

Activity

/** * * 使用ServketSocket做服务通信 * * * @author  刘楠 */public class MainActivity extends AppCompatActivity {    private EditText input;    private TextView show;    private ClientThread clientThread;    private Button send;    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        input = (EditText) findViewById(R.id.input);        show = (TextView) findViewById(R.id.show);        send = (Button) findViewById(R.id.send);        /**         * 接收到消息要就显示         */         handler = new Handler(){            @Override            public void handleMessage(Message msg) {                if(msg.what==0x123){                    show.append("\n"+msg.obj.toString());                }            }        };        //初始化子线程        clientThread = new ClientThread(handler);        //启动子线程        new Thread(clientThread).start();        send.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String str = input.getText().toString().trim();                Message msg=new Message();                msg.what=0x345;                msg.obj=str;                //把内容发给子线程                clientThread.revHandler.sendMessage(msg);                //清空文本框                input.setText("");            }        });    }}

 

 

 

2.URL连接网络

 

布局

 

Activity

/** * URL连接网络 * 获取URL地址 * 打开流,获取流的内容 *  */public class MainActivity extends AppCompatActivity {    /*    标识表示成功     */    private static final int SUCCESS = 1;    //路径写死了 也可以获取的方式    private String path ="http://img2.imgtn.bdimg.com/it/u=4114593003,3380074209&fm=21&gp=0.jpg";    /*    图片     */    Bitmap bitmap;    /*    显示图片     */    ImageView show;    /*    输入的URL     */    private EditText et_url;    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_url = (EditText) findViewById(R.id.et_url);        show = (ImageView) findViewById(R.id.show);        handler = new Handler(){            @Override            public void handleMessage(Message msg) {                switch(msg.what){                    case SUCCESS:                    show.setImageBitmap(bitmap);                    break;                }            }        };    }    /**     * 获取输入的地址并显示图片     * @param v  当前对象     */    public void display(View v){        String strPath = et_url.getText().toString().trim();        if(TextUtils.isEmpty(strPath)){            Toast.makeText(this,"输入的路径不能为空",Toast.LENGTH_SHORT).show();            return ;        }        new Thread(new Runnable() {            @Override            public void run() {                try {                    //获取URL                    URL url = new URL(path);                    //打开流获取资源                    InputStream in = url.openStream();                    //使用BitmapFactory转换为Bitmap                    bitmap = BitmapFactory.decodeStream(in);                    //获取消息                    Message msg = Message.obtain();                    msg.what=SUCCESS;                    msg.obj=bitmap;                    handler.sendMessage(msg);                    //关闭                   // in.close();                    //把文件保存到本地                    in =url.openStream();                    OutputStream out = openFileOutput("test.png",MODE_PRIVATE);                    byte [] buf = new byte [1024];                    int len=0;                    while((len=in.read(buf))!=-1){                        out.write(buf,0,len);                    }                    out.close();                    in.close();                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }}

 

添加网络权限

 

3.URLConnection连接网络

 

使用URLConnection连接网络 *Get方式只要 获取请求地址把请求参数拼接在URL地址后面"?username="+user+"&password="+password * openConnection * 设置请求头信息 * connect()建立实际连接 * 获取输入流conn.getInputStream * 读取输入流中的内容 * * Post方式, * 请求地址 * ,将参数单独拼接为一个字符串params="username="+user+"&password="+password * openConnection * 设置请求头信息 * connect()建立实际连接 * setDoOuput(true) * setDoInput(true) * 写出参数conn.getOutPutStream().write(params.getBytes()); * 获取输入流conn.getInputStream * 读取输入流中的内容

 

 

服务器Servlet

 

/** * LoginServlet* @Decription 处理登录请求的Servlet * @author 刘楠 * * @time2016-2-22下午9:40:48 */@WebServlet(urlPatterns={"/login"})public class LoginServlet extends HttpServlet {    @SuppressWarnings("deprecation")    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        /*         * 获取用户名与密码并转换为UTF-8         */        String user = request.getParameter("username");        /*String encode = URLEncoder.encode(user,"iso8859-1");        String decode = URLDecoder.decode(encode, "UTF-8");*/                String username =new String(user.getBytes("iso8859-1"),"utf-8");        System.out.println("用户名:"+username);                String pwd=request.getParameter("password");                String password = new String(pwd.getBytes("iso8859-1"), "UTF-8");        System.out.println("密码:"+password);                /*         * 这里写死用户名与密码,         * 正常是去数据库查询         */        PrintWriter writer = response.getWriter();                if("admin".equals(username)&& "admin".equals(password)){            writer.write("SUCCESS");                    }else{            writer.write("FAILURE");        }                                                        }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("================post===============");        request.setCharacterEncoding("UTF-8");        String username = request.getParameter("username");                String password = request.getParameter("password");        System.out.println("username:"+username+",password: "+password);                if("admin".equals(username) && "admin".equals(password)){            response.getWriter().print("SUCCESS");        }else{            response.getWriter().print("failure");        }    }}
View Code

 

3.1get请求与Post请求

 布局

 

Activity

/** * 使用URLConnection连接网络 *Get方式只要 获取请求地址把请求参数拼接在URL地址后面"?username="+user+"&password="+password * openConnection * 设置请求头信息 * connect()建立实际连接 * 获取输入流conn.getInputStream * 读取输入流中的内容 * * Post方式, * 请求地址 * ,将参数单独拼接为一个字符串params="username="+user+"&password="+password * openConnection * 设置请求头信息 * connect()建立实际连接 * setDoOuput(true) * setDoInput(true) * 写出参数conn.getOutPutStream().write(params.getBytes()); * 获取输入流conn.getInputStream * 读取输入流中的内容 * * */public class MainActivity extends AppCompatActivity {    private static final int SUCCESS = 1;    private static final int ERROR =2 ;    private static final String TAG ="MainActivity" ;    /*        请求的路径         */    private String path="http://192.168.1.103:8080/Login/login";    private TextView show;    private EditText et_user;    private EditText et_pwd;    /*    Handler 消息处理     */    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /*        初始化         */        et_user = (EditText) findViewById(R.id.et_user);        et_pwd = (EditText) findViewById(R.id.et_pwd);        show = (TextView) findViewById(R.id.show);        handler = new Handler(){            @Override            public void handleMessage(Message msg) {                switch (msg.what){                    case SUCCESS:                        show.setText(msg.obj.toString());                        break;                    case ERROR:                        Toast.makeText(MainActivity.this,"网络异常",Toast.LENGTH_SHORT).show();                        break;                }            }        };    }    /**     * get 方式请求     * @param v 当前组件     */    public void get(View v){        String username = et_user.getText().toString().trim();        String password = et_pwd.getText().toString().trim();        if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){            Toast.makeText(this,"用户名或者密码不能为空",Toast.LENGTH_SHORT).show();            return ;        }        final String urlName =path+"?username="+username+"&password="+password;        /*        get请求         */        new Thread(){            @Override            public void run() {                try {                    //获取请求URL地址                    URL url=new URL(urlName);                    //打开连接                    URLConnection conn = url.openConnection();                    //设置超时时间                    conn.setConnectTimeout(5000);                    // 设置通用的请求属性                    conn.setRequestProperty("accept", "*/*");                    conn.setRequestProperty("connection", "Keep-Alive");                    conn.setRequestProperty("user-agent",                            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");                    //建立实际连接                    conn.connect();                    //获取所有的行响应 头字段                    Map
> map = conn.getHeaderFields(); Set
keySet = map.keySet(); for (String key:keySet ) { Log.i(TAG,"key"+key+"------------>"+map.get(key)); } //定义输入流来获取URL的响应 InputStream in = conn.getInputStream(); ByteArrayOutputStream bas= new ByteArrayOutputStream(); int len=0; byte [] buf = new byte[1024]; while((len=in.read(buf))!=-1){ bas.write(buf,0,len); } //转换为字符串 String result=bas.toString(); //设置消息对象 Message msg = Message.obtain(); //成功就发送SUCCESS msg.what=SUCCESS; msg.obj=result; //发送 handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); //出异常就发送ERROR Message msg = Message.obtain(); msg.what=ERROR; handler.sendMessage(msg); } } }.start(); } /** * post 方式请求 * @param v 当前组件 */ public void post(View v){ String username = et_user.getText().toString().trim(); String password = et_pwd.getText().toString().trim(); if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){ Toast.makeText(this,"用户名或者密码不能为空",Toast.LENGTH_SHORT).show(); return ; } final String params="username="+username+"&password="+password; /* post请求 */ new Thread(){ @Override public void run() { try { //获取请求URL地址 URL url=new URL(path); //打开连接 URLConnection conn = url.openConnection(); //设置超时时间 conn.setConnectTimeout(5000); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); /* post请求必须有以下2行 */ conn.setDoOutput(true); conn.setDoInput(true); OutputStream out = conn.getOutputStream(); out.write(params.getBytes()); //建立实际连接 //获取所有的行响应 头字段 Map
> map = conn.getHeaderFields(); Set
keySet = map.keySet(); for (String key:keySet ) { Log.i(TAG,"key"+key+"------------>"+map.get(key)); } //定义输入流来获取URL的响应 InputStream in = conn.getInputStream(); ByteArrayOutputStream bas= new ByteArrayOutputStream(); int len=0; byte [] buf = new byte[1024]; while((len=in.read(buf))!=-1){ bas.write(buf,0,len); } //转换为字符串 String result=bas.toString(); //设置消息对象 Message msg = Message.obtain(); //成功就发送SUCCESS msg.what=SUCCESS; msg.obj=result; //发送 handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); //出异常就发送ERROR Message msg = Message.obtain(); msg.what=ERROR; handler.sendMessage(msg); } } }.start(); }}
View Code

 

添加网络权限

4.Http网络连接

 

和URLConnection非常类似只获取连接为HttpURULConnection

 

/**  * 使用HttpURLConnection连接网络  *Get方式只要 获取请求地址把请求参数拼接在URL地址后面"?username="+user+"&password="+password  * openConnection  * 设置请求方法setRequestMethod("GET")必须大写  *  * 获取输入流conn.getInputStream  * 读取输入流中的内容  *  * Post方式,  * 请求地址  * ,将参数单独拼接为一个字符串params="username="+user+"&password="+password  * openConnection  * 设置请求方法setRequestMethod("POST")必须大写  * setDoOuput(true)  * setDoInput(true)  * 写出参数conn.getOutPutStream().write(params.getBytes());  * 获取输入流conn.getInputStream  * 读取输入流中的内容  *  *  */

 

/** * 使用HttpURLConnection连接网络 *Get方式只要 获取请求地址把请求参数拼接在URL地址后面"?username="+user+"&password="+password * openConnection * 设置请求方法setRequestMethod("GET")必须大写 * * 获取输入流conn.getInputStream * 读取输入流中的内容 * * Post方式, * 请求地址 * ,将参数单独拼接为一个字符串params="username="+user+"&password="+password * openConnection * 设置请求方法setRequestMethod("POST")必须大写 * setDoOuput(true) * setDoInput(true) * 写出参数conn.getOutPutStream().write(params.getBytes()); * 获取输入流conn.getInputStream * 读取输入流中的内容 * * */public class MainActivity extends  AppCompatActivity{private static final int SUCCESS = 1;private static final int ERROR =2 ;private static final String TAG ="MainActivity" ;    /*        请求的路径         */private String path="http://192.168.1.100:8080/Login/login";private TextView show;private EditText et_user;private EditText et_pwd;    /*    Handler 消息处理     */private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /*        初始化         */        et_user = (EditText) findViewById(R.id.et_user);        et_pwd = (EditText) findViewById(R.id.et_pwd);        show = (TextView) findViewById(R.id.show);        handler = new Handler(){@Overridepublic void handleMessage(Message msg) {        switch (msg.what){        case SUCCESS:        show.setText(msg.obj.toString());        break;        case ERROR:        Toast.makeText(MainActivity.this, "网络异常", Toast.LENGTH_SHORT).show();        break;        }        }        };        }/** * get 方式请求 * @param v 当前组件 */public void get(View v){        String username = et_user.getText().toString().trim();        String password = et_pwd.getText().toString().trim();        if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){        Toast.makeText(this,"用户名或者密码不能为空",Toast.LENGTH_SHORT).show();        return ;        }final String urlName =path+"?username="+username+"&password="+password;        /*        get请求         */        new Thread(){@Overridepublic void run() {        try {        //获取请求URL地址        URL url=new URL(urlName);        //打开连接        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        //设置超时时间        conn.setConnectTimeout(5000);        //设置请求方式        conn.setRequestMethod("GET");        //获取响应码        int code = conn.getResponseCode();        if(code==200) {                //获取所有的行响应 头字段                Map
> map = conn.getHeaderFields(); Set
keySet = map.keySet(); for (String key : keySet) { Log.i(TAG, "key" + key + "------------>" + map.get(key)); } //定义输入流来获取URL的响应 InputStream in = conn.getInputStream(); ByteArrayOutputStream bas = new ByteArrayOutputStream(); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { bas.write(buf, 0, len); } //转换为字符串 String result = bas.toString(); //设置消息对象 Message msg = Message.obtain(); //成功就发送SUCCESS msg.what = SUCCESS; msg.obj = result; //发送 handler.sendMessage(msg); }else{ //出异常就发送ERROR Message msg = Message.obtain(); msg.what=ERROR; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); //出异常就发送ERROR Message msg = Message.obtain(); msg.what=ERROR; handler.sendMessage(msg); } } }.start(); }/** * post 方式请求 * @param v 当前组件 */public void post(View v){ String username = et_user.getText().toString().trim(); String password = et_pwd.getText().toString().trim(); if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){ Toast.makeText(this,"用户名或者密码不能为空",Toast.LENGTH_SHORT).show(); return ; }final String params="username="+username+"&password="+password; /* post请求 */ new Thread(){@Overridepublic void run() { try { //获取请求URL地址 URL url=new URL(path); //打开连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置超时时间 conn.setConnectTimeout(5000); //设置请求方式 conn.setRequestMethod("POST"); /* post请求必须有以下2行 */ conn.setDoOutput(true); OutputStream out = conn.getOutputStream(); out.write(params.getBytes()); //建立实际连接 //获取所有的行响应 头字段 Map
> map = conn.getHeaderFields(); Set
keySet = map.keySet(); for (String key:keySet ) { Log.i(TAG,"key"+key+"------------>"+map.get(key)); } //定义输入流来获取URL的响应 InputStream in = conn.getInputStream(); ByteArrayOutputStream bas= new ByteArrayOutputStream(); int len=0; byte [] buf = new byte[1024]; while((len=in.read(buf))!=-1){ bas.write(buf,0,len); } //转换为字符串 String result=bas.toString(); //设置消息对象 Message msg = Message.obtain(); //成功就发送SUCCESS msg.what=SUCCESS; msg.obj=result; //发送 handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); //出异常就发送ERROR Message msg = Message.obtain(); msg.what=ERROR; handler.sendMessage(msg); } } }.start(); } }
View Code

 

5.使用ApacheHttpClient

/** * 使用HttpClient做网络请求 5.0过期,6.0不可用 *  * 建立HttpClient对象 get请求 建立httpGet对象 * setParams来设置参数 * 也可以将参数拼接在URL地址后面 *  * post请求 建立HttpPost对象 * 设置请求体 * setEntity * new UrlEncodedFormEntity(List
) * 设置参数 * * 获取行响应码,判断, * 获取行响应体 * * * * @author 刘楠 * * 2016-2-23上午12:04:06 */public class MainActivity extends Activity { private static final int SUCCESS = 1; private static final int ERROR = 2; private static final String TAG = "MainActivity"; /* * 请求的路径 */ private String path = "http://192.168.1.100:8080/Login/login"; private TextView show; private EditText et_user; private EditText et_pwd; private HttpClient client; /* * Handler 消息处理 */ private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 初始化 */ client = new DefaultHttpClient(); et_user = (EditText) findViewById(R.id.et_user); et_pwd = (EditText) findViewById(R.id.et_pwd); show = (TextView) findViewById(R.id.show); handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SUCCESS: show.setText(msg.obj.toString()); break; case ERROR: Toast.makeText(MainActivity.this, "网络异常", Toast.LENGTH_SHORT).show(); break; } } }; } /** * get 方式请求 * * @param v * 当前组件 */ private String urlName ; public void get(View v) { String username = et_user.getText().toString().trim(); String password = et_pwd.getText().toString().trim(); if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { Toast.makeText(this, "用户名或者密码不能为空", Toast.LENGTH_SHORT).show(); return; } try { urlName = path + "?username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } /* * get请求 */ new Thread() { @Override public void run() { try { HttpGet get = new HttpGet(urlName); /** * 可以使用HttpParams设置参数 HttpParams params = new * BasicHttpParams(); */ // 开始执行 HttpResponse response = client.execute(get); // 获取响应码 int code = response.getStatusLine().getStatusCode(); if (code == 200) { // 获取内容响应体中的内容 InputStream in = response.getEntity().getContent(); ByteArrayOutputStream bas = new ByteArrayOutputStream(); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { bas.write(buf, 0, len); } String result = bas.toString(); in.close(); //设置消息 Message msg = Message.obtain(); msg.what = SUCCESS; msg.obj = result; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = SUCCESS; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); } } }.start(); } /** * post 方式请求 * * @param v * 当前组件 * @throws UnsupportedEncodingException */ public void post(View v) { final String username = et_user.getText().toString().trim(); final String password = et_pwd.getText().toString().trim(); if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { Toast.makeText(this, "用户名或者密码不能为空", Toast.LENGTH_SHORT).show(); return; } /* * post请求 */ new Thread() { @Override public void run() { try { //建立Post请求 HttpPost post = new HttpPost(path); List
parameters = new ArrayList
(); parameters.add(new BasicNameValuePair("username", username)); parameters.add(new BasicNameValuePair("password", password)); //设置请求体与字符编码 post.setEntity(new UrlEncodedFormEntity(parameters,"UTF-8") ); //执行 HttpResponse response = client.execute(post); //获取响应码 int code = response.getStatusLine().getStatusCode(); if (code == 200) { // 获取内容响应体中的内容 InputStream in = response.getEntity().getContent(); ByteArrayOutputStream bas = new ByteArrayOutputStream(); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { bas.write(buf, 0, len); } String result = bas.toString(); in.close(); //设置消息 Message msg = Message.obtain(); msg.what = SUCCESS; msg.obj = result; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = SUCCESS; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); } } }.start(); }}
View Code

 

6.WebView

 

goBack():后退

goForward():前进

loadUrl(String url):加载指定URL的网页

boolean zoomln():放大网页

zoomOut():缩小网页

 

 

布局

布局

Activity

/** * WebView小型浏览器 * */public class MainActivity extends AppCompatActivity {    /*    接收输入的URL     */    private EditText et_url;    /*    显示网页内容     */    private WebView wv_show;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_url = (EditText) findViewById(R.id.et_url);        wv_show = (WebView) findViewById(R.id.wv_show);    }    @Override    public boolean onKeyDown(int keyCode,KeyEvent event) {        if(keyCode==KeyEvent.KEYCODE_MENU){            String urlStr = et_url.getText().toString().trim();            //加载            wv_show.loadUrl(urlStr);            return  true;        }        return false;    }}

 

 

添加权限

 

7.使用WebHTML加载HTML代码

 

WebView提供了一具

 

loadData(String data,String mimeType ,String encoding)方法用于加载HTML,这个方法加载中文时会有乱码

 

还有一个

 

loadDataWithURL(String data,String mimeType ,String encoding,String historyUrl)方法是第一个方法的加强,

 

data:指定的HTML代码

 

mimeType:指定HTML代码的MIME类型,对象HTML代码可指定为text/html

 

encoding:指定HTML代码编码所有的字符集:UTF-8

 

 

 

布局中只有一个WebView

 

 
/** * WebView显示HTML */public class MainActivity extends AppCompatActivity {    private WebView webView_show;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取webView组件        webView_show = (WebView) findViewById(R.id.webView_show);        StringBuilder sb = new StringBuilder();        sb.append("");        sb.append("");        sb.append(" 欢迎WebView显示HTML");        sb.append("");        sb.append("");        sb.append("

显示中文标题

"); sb.append(""); sb.append(""); //加载并显示HTML这个中文会显示乱码 //webView_show.loadData(sb.toString(),"text/html","utf-8"); webView_show.loadDataWithBaseURL(null,sb.toString(),"text/html","utf-8",null); }}

 

 

 

 

9.WebView使用JavaScript调用Android

 

  • 步骤:
  •  

  • 1.调用WebView的get getSettings方法获取WebSettings
  • 2.启用JAVAScript调用功能
  • webSettings.setJavaScriptEnable(true)
  • 3.调用webView的addJavaScript(Object obj,String name)方法
  • 4.在javaScript脚本中通过刚才暴露的name对象调用Android
  • 5.对象的方法上必须加上注解
  • /**
    •  * 这具注解只能用在方法
      •  */
        • @JavascriptInterface
 

 

 

 

 

Html在assets目录下

 

    
JS 调用

 

 

 

 

布局

 

 

 

 

 

JAVABean:

 

/** * Created by  刘楠 on 2016-02-23 09:00. */public class Person {    private String name;    private int age;    private Context mContext;    public Person(Context context){        this.mContext = context;    }    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @JavascriptInterface    public void show(){        Toast.makeText(mContext,"姓名"+this.name+",年龄:"+age,Toast.LENGTH_SHORT).show();    }    /**     * 这具注解只能用在方法     */    @JavascriptInterface    public void showList(){        new AlertDialog.Builder(mContext)       //设置标题        .setTitle("人员列表")       .setIcon(R.mipmap.ic_launcher)       .setItems(new String [] {"JAVA","Android","C++","C","PYTHON"},null)                .setPositiveButton("确定",null)                .setNegativeButton("取消",null)                .create().show();    }}

 

 

 

 

Activity

 

/** * WebView使用JavaScript *  */public class MainActivity extends AppCompatActivity {    private WebView webView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        webView = (WebView) findViewById(R.id.webView);        webView.loadUrl("file:///android_asset/test.html");        //获取WebView设置对象        WebSettings webSettings = webView.getSettings();        //启用javaScript        webSettings.setJavaScriptEnabled(true);        Person person = new Person(this);        person.setName("张三");        person.setAge(18);        //传递对象        webView.addJavascriptInterface(person, "person");    }}

 

 

 

 

转载地址:http://mfmko.baihongyu.com/

你可能感兴趣的文章
面象过程与面象对象
查看>>
谷歌设置支持webgl
查看>>
js的AJAX请求有关知识总结
查看>>
Eclipse添加新server时无法选择Tomcat7的问题
查看>>
nginx 配置https 负载均衡
查看>>
双拓扑排序 HDOJ 5098 Smart Software Installer
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
修改OBS为仅直播音频
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
DMA32映射问题
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
SVN服务器使用(二)
查看>>