Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 560|回复: 0

开发交流:android 网络编程

[复制链接]

该用户从未签到

发表于 2011-10-24 10:28:57 | 显示全部楼层 |阅读模式
1. HttpURLConnection接口
      首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。
      HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:
URL url = new URL("http://www.51cto.com/index.jsp?par=123456");   

HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();  
复制代码   通过以下方法可以对请求的属性进行一些设置,如下所示 //设置输入和输出流   

urlConn.setDoOutput(true);   

urlConn.setDoInput(true);   

//设置请求方式为POST   

urlConn.setRequestMethod(&quotOST");   

//POST请求不能使用缓存   

urlConn.setUseCaches(false);   

//关闭连接   

urlConn.disConnection();   
复制代码Manifest文件中权限的设定: <uses-permission android:name="android.permission.INTERNET" />
复制代码HttpURLConnection默认使用GET方式,例如下面代码所示: //以Get方式上传参数  

public class Activity03 extends Activity  

{  

    private final String DEBUG_TAG = "Activity03";   

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState)  

    {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.http);   

        TextView mTextView = (TextView)this.findViewById(R.id.TextView_HTTP);  

        //http地址"?par=abcdefg"是我们上传的参数  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=abcdefg";  

        //获得的数据  

        String resultData = "";  

        URL url = null;  

        try  

        {  

            //构造一个URL对象  

            url = new URL(httpUrl);   

        }  

        catch (MalformedURLException e)  

        {  

            Log.e(DEBUG_TAG, "MalformedURLException");  

        }  

        if (url != null)  

        {  

            try  

            {  

                // 使用HttpURLConnection打开连接  

                HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  

                //得到读取的内容(流)  

                InputStreamReader in = new InputStreamReader(urlConn.getInputStream());  

                // 为输出创建BufferedReader  

                BufferedReader buffer = new BufferedReader(in);  

                String inputLine = null;  

                //使用循环来读取获得的数据  

                while (((inputLine = buffer.readLine()) != null))  

                {  

                    //我们在每一行后面加上一个"\n"来换行  

                    resultData += inputLine + "\n";  

                }           

                //关闭InputStreamReader  

                in.close();  

                //关闭http连接  

                urlConn.disconnect();  

                //设置显示取得的内容  

                if ( resultData != null )  

                {  

                    mTextView.setText(resultData);  

                }  

                else   

                {  

                    mTextView.setText("读取的内容为NULL");  

                }  

            }  

            catch (IOException e)  

            {  

                Log.e(DEBUG_TAG, "IOException");  

            }  

        }  

        else  

        {  

            Log.e(DEBUG_TAG, "Url NULL");  

        }  

}  
复制代码如果需要使用POST方式,则需要setRequestMethod设置。代码如下: //以post方式上传参数  

public class Activity04  extends Activity  

{  

    private final String DEBUG_TAG = "Activity04";   

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState)  

    {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.http);  

         

        TextView mTextView = (TextView)this.findViewById(R.id.TextView_HTTP);  

        //http地址"?par=abcdefg"是我们上传的参数  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  

        //获得的数据  

        String resultData = "";  

        URL url = null;  

        try  

        {  

            //构造一个URL对象  

            url = new URL(httpUrl);   

        }  

        catch (MalformedURLException e)  

        {  

            Log.e(DEBUG_TAG, "MalformedURLException");  

        }  

        if (url != null)  

        {  

            try  

            {  

                // 使用HttpURLConnection打开连接  

                HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  

                //因为这个是post请求,设立需要设置为true  

                urlConn.setDoOutput(true);  

                urlConn.setDoInput(true);  

                // 设置以POST方式  

                urlConn.setRequestMethod("POST");  

                // Post 请求不能使用缓存  

                urlConn.setUseCaches(false);  

                urlConn.setInstanceFollowRedirects(true);  

                // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的  

                urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  

                // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,  

                // 要注意的是connection.getOutputStream会隐含的进行connect。  

                urlConn.connect();  

                //DataOutputStream流  

                DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  

                //要上传的参数  

                String content = "par=" + URLEncoder.encode("ABCDEFG", "gb2312");  

                //将要上传的内容写入流中  

                out.writeBytes(content);   

                //刷新、关闭  

                out.flush();  

                out.close();   

                //获取数据  

                BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));  

                String inputLine = null;  

                //使用循环来读取获得的数据  

                while (((inputLine = reader.readLine()) != null))  

                {  

                    //我们在每一行后面加上一个"\n"来换行  

                    resultData += inputLine + "\n";  

                }           

                reader.close();  

                //关闭http连接  

                urlConn.disconnect();  

                //设置显示取得的内容  

                if ( resultData != null )  

                {  

                    mTextView.setText(resultData);  

                }  

                else   

                {  

                    mTextView.setText("读取的内容为NULL");  

                }  

            }  

            catch (IOException e)  

            {  

                Log.e(DEBUG_TAG, "IOException");  

            }  

        }  

        else  

        {  

            Log.e(DEBUG_TAG, "Url NULL");  

        }  

    }  

}  
复制代码2. HttpClient接口
使用Apache提供的HttpClient接口同样可以进行HTTP操作。
对于GET和POST请求方法的操作有所不同。GET方法的操作代码示例如下: public class Activity02 extends Activity  

{  

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState)  

    {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.http);  

        TextView mTextView = (TextView) this.findViewById(R.id.TextView_HTTP);  

        // http地址  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get";  

        //HttpGet连接对象  

        HttpGet httpRequest = new HttpGet(httpUrl);  

        try  

        {  

            //取得HttpClient对象  

            HttpClient httpclient = new DefaultHttpClient();  

            //请求HttpClient,取得HttpResponse  

            HttpResponse httpResponse = httpclient.execute(httpRequest);  

            //请求成功  

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  

            {  

                //取得返回的字符串  

                String strResult = EntityUtils.toString(httpResponse.getEntity());  

                mTextView.setText(strResult);  

            }  

            else  

            {  

                mTextView.setText("请求错误!");  

            }  

        }  

        catch (ClientProtocolException e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }  

        catch (IOException e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }  

        catch (Exception e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }   

      

            }  

}  
复制代码使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数,另外,还需要设置所使用的字符集。代码如下所示: public class Activity03 extends Activity  

{  

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState)  

    {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.http);  

        TextView mTextView = (TextView) this.findViewById(R.id.TextView_HTTP);  

        // http地址  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  

        //HttpPost连接对象  

        HttpPost httpRequest = new HttpPost(httpUrl);  

        //使用NameValuePair来保存要传递的Post参数  

        List<NameValuePair> params = new ArrayList<NameValuePair>();  

        //添加要传递的参数  

        params.add(new BasicNameValuePair("par", "HttpClient_android_Post"));  

        try  

        {  

            //设置字符集  

            HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");  

            //请求httpRequest  

            httpRequest.setEntity(httpentity);  

            //取得默认的HttpClient  

            HttpClient httpclient = new DefaultHttpClient();  

            //取得HttpResponse  

            HttpResponse httpResponse = httpclient.execute(httpRequest);  

            //HttpStatus.SC_OK表示连接成功  

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  

            {  

                //取得返回的字符串  

                String strResult = EntityUtils.toString(httpResponse.getEntity());  

                mTextView.setText(strResult);  

            }  

            else  

            {  

                mTextView.setText("请求错误!");  

            }  

        }  

        catch (ClientProtocolException e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }  

        catch (IOException e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }  

        catch (Exception e)  

        {  

            mTextView.setText(e.getMessage().toString());  

        }   

    }  

}  
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:28:59 | 显示全部楼层

Re:开发交

顶一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 05:21 , Processed in 0.299548 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表