HttpGet请求

来源:互联网 发布:linux copy文件夹 编辑:程序博客网 时间:2024/04/29 05:58
在我们平时做的一些项目中,经常会用到连接网络的功能。这里以HttpGet为例子做一个简单的访问百度页面得到其中的代码的例子。1 首先,需要得到自己要访问的服务器地址 
String uriAPI = "http://www.baidu.com";
2 然后创建我们的请求
   HttpGet httpRequest = new HttpGet(uriAPI);

3 执行我们的请求之后得到返回的对象

HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);                            if (httpResponse.getStatusLine().getStatusCode() == 200) {                           //执行连接成功后的代码                            }

/*
完整的代码
*/

package com.hdu.httppost;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import java.io.IOException;public class MainActivity extends ActionBarActivity {    private EditText et_load;    private Button visit;    private String uriAPI = "http://www.baidu.com";    private String result;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 1) {                et_load.setText(result);            } else if (msg.what == 2) {                et_load.setText("连接错误");            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_load = (EditText) findViewById(R.id.et_load);        visit = (Button) this.findViewById(R.id.visit);        visit.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new Thread() {                    public void run() {                        HttpGet httpRequest = new HttpGet(uriAPI);                        try {                            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);                            if (httpResponse.getStatusLine().getStatusCode() == 200) {                                result = EntityUtils.toString(httpResponse.getEntity());                                handler.sendEmptyMessage(1);                            }                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }.start();            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

这里有人可能会问为什么要新建线程来执行呢?这里就涉及到android中的UI线程子线程的关系了,android中,UI的更新只能在主线程中, 然而当执行一些比较花费时间的操作的时候,却不能直接在主线程中进行,因为会阻塞线程,这样就需要新建线程了。所以当我们要更新线程的时候,需要从子线程中发送信息给主线程,通知主线程进行操作,因为要有Handler对象。

0 0
原创粉丝点击