您的位置:首页 > 理论基础 > 计算机网络

HttpGet请求

2015-10-06 15:07 405 查看
在我们平时做的一些项目中,经常会用到连接网络的功能。这里以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对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: