上篇和中篇介绍了通过标准java接口来实现Android应用的联网操作,但都只是简单地进行了网络的访问,但是在实际开发中,可能会运用到更复杂的联网操作。Apache提供了HttpClient, 它对java.net中的类做了封装和抽象,更适合我们在Android上开发联网应用。
下面将分别使用Get和Post方式请求一个网页:
我们先来看看HttpClient中如何使用Get方式获取数据,这里需要使用HttpGet来构建一个Get方式的Http请求,然后通过HttpClient来执行这个请求,HttpResponse在接收这个请求后给出响应,最后通过"HttpResponse.getStatusLine().getStatusCode()"来判断请求是否成功,并处理。具体实现如下:
- HttpClient接口中用Get方式传递参数
package HA.httpurl;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
//HttpClient接口中用Get方式传递参数
public class HttpClientGet extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// setContentView(R.layout.http);
TextView mTextView = new TextView(this);
ScrollView scrollView = new ScrollView(this);
String httpUrl = "http://www.xiaonei.com";
HttpGet httpRequest = new HttpGet(httpUrl);
try {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(httpResponse.getEntity());
mTextView.setText(strResult);
scrollView.addView(mTextView);
this.setContentView(scrollView);
} else {
mTextView.setText("请求错误");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
} catch (IOException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
}
// Button button_back = (Button)this.findViewById(R.id.Button_Back);
// button_back.setOnClickListener(new OnClickListener(){
//
// public void onClick(View v) {
// // TODO Auto-generated method stub
// Intent intent = new Intent();
// intent.setClass(HttpClientGet.this, Activity01.class);
// startActivity(intent);
// HttpClientGet.this.finish();
// }
// });
}
}
- HttpClient接口中用Post方式传递参数
package HA.httpurl;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
//HttpClient接口中用Post方式传递参数
public class HttpClientPost extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// setContentView(R.layout.http);
TextView mTextView = new TextView(this);
ScrollView scrollView = new ScrollView(this);
String httpUrl = "http://3g.renren.com/login.do";
HttpPost httpRequest = new HttpPost(httpUrl);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email","******"));
params.add(new BasicNameValuePair("&password","*******"));
try {
HttpEntity httpentity = new UrlEncodedFormEntity(params, "UTF-8");
httpRequest.setEntity(httpentity);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(httpResponse.getEntity());
mTextView.setText(strResult);
scrollView.addView(mTextView);
this.setContentView(scrollView);
} else {
mTextView.setText("请求错误!");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
} catch (IOException e) {
// TODO Auto-generated catch block
mTextView.setText(e.getMessage().toString());
}
//
// Button button_back = (Button)this.findViewById(R.id.Button_Back);
// button_back.setOnClickListener(new OnClickListener(){
//
// public void onClick(View v) {
// // TODO Auto-generated method stub
// Intent intent = new Intent();
// intent.setClass(HttpClientPost.this,Activity01.class);
// startActivity(intent);
// HttpClientPost.this.finish();
// }
// });
}
}