(1)Servlet如何使用json,请参考上篇日志《servlet使用json案例,提供jar文件下载》,如果想要实现,可以结合上篇日志和这篇日志一起看。
(2)android中已经内置json包,因此直接使用即可。
(3)android使用httpClinet进行http通讯,完成android客户端与服务器端servlet的交互,代码如下:
package com.example.jasontest;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity {
public static final String URL = "http://10.0.2.2:8080/android/test";
Button get;
Button post;
EditText name;
EditText code;
TextView infoView;
ScrollView scrollView;
boolean isPost = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
get = (Button)findViewById(R.id.Get);
post = (Button)findViewById(R.id.Post);
name = (EditText)findViewById(R.id.name);
code = (EditText)findViewById(R.id.code);
infoView = (TextView)findViewById(R.id.info);
scrollView = (ScrollView)findViewById(R.id.infoViewScroll);
get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
isPost = false;
new SubmitAsyncTask().execute(URL);
}
});
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
isPost = true;
new SubmitAsyncTask().execute(URL);
}
});
}
private String doGet(String url) {
String responseStr = "";
try {
String strName = name.getText().toString().trim();
String strCode = code.getText().toString().trim();
String getUrl = URL + "?name="+strName+"&"+"code="+strCode;
HttpGet httpRequest = new HttpGet(getUrl);
HttpParams params = new BasicHttpParams();
ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 5000);
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
final int ret = httpResponse.getStatusLine().getStatusCode();
if (ret == HttpStatus.SC_OK) {
responseStr = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
System.out.println("responseStr->" + responseStr);
try {
JSONTokener jsonParser = new JSONTokener(responseStr);
JSONObject result = (JSONObject)jsonParser.nextValue();
responseStr = result.getString("result");
}
catch (JSONException e) {
responseStr = "-1";
e.printStackTrace();
}
}
else {
responseStr = "-1";
}
System.out.println("doGet->Response" + responseStr);
}
catch (Exception e) {
e.printStackTrace();
}
return responseStr;
}
private String doPost(String url) {
String responseStr = "";
try {
HttpPost httpRequest = new HttpPost(url);
HttpParams params = new BasicHttpParams();
ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 5000);
httpRequest.setParams(params);
List<BasicNameValuePair> paramList = new ArrayList<BasicNameValuePair>();
String strName = name.getText().toString().trim();
String strCode = code.getText().toString().trim();
paramList.add(new BasicNameValuePair("name", strName));
paramList.add(new BasicNameValuePair("code", strCode));
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(paramList, HTTP.UTF_8);
httpRequest.setEntity(urlEncodedFormEntity);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpRequest);
final int ret = httpResponse.getStatusLine().getStatusCode();
if (ret == HttpStatus.SC_OK) {
responseStr = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
}
else {
responseStr = "-1";
}
}
catch (Exception e) {
e.printStackTrace();
}
return responseStr;
}
public class SubmitAsyncTask extends AsyncTask<String, Void, String> {
String info = "";
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String url = params[0];
String reps = "";
if (isPost) {
info = "httpPost 返回结果";
reps = doPost(url);
}
else {
info = "HttpGet 返回结果";
reps = doGet(url);
}
System.out.println("doInBackground->response:"+reps);
return reps;
}
protected void onPostExecute(String result) {
String res = result.trim();
infoView.append("\n"+info+result+"\n");
if (res.equals("0")) {
info = "验证通过...";
}
else if (res.equals("1")) {
info = "密码错误...";
}
else if (res.equals("2")) {
info = "用户名错误...";
}
else if (res.equals("-1")) {
info = "返回结果异常!";
}
infoView.append(info+"\n");
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
System.out.println("onPostExecute->info"+info);
super.onPostExecute(result);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}