这两天学了android 获取服务器端json数据,特地给大家分享一下:
我们的目标是------》获取到json数据,不管服务器端的是什么,只要能在servlet页面输出一个json。剩下的就看手机端如何获取的了。
目前我就学到了 HttpClient获取服务器端json和connection获取服务端json
先给各位大哥献上代码先:
package com.example.getjson;
//这里是一群import-------------------------闪过
//直接上正题-------------为了方便我把代码写在一个类里面了----------------实体类自己写,layout自己写。
public class MainActivity extends Activity {
private TextView view1;
private Button button1,button2;
Handler hander;
String result=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view1=(TextView)findViewById(R.id.test1);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
hander=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 1: Log.i("json", "调用getmethods()");
view1.setText(result);break;
case 2: Log.i("json", "调用getjson()");
view1.setText(result);;break;
default :Log.i("json", "没有找到");
}
}
};
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
getmethods();//--------------------------------------------这个是获得服务器json的第一种方法
Message message=new Message();
message.what=1;
hander.sendMessage(message);//--------------------------这个是打印出获取的json
}
}).start();
}
});
button2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
getjson(); //--------------------------------------------这个是获得服务器json的第一种方法
Message message=new Message();
message.what=2;
hander.sendMessage(message);//--------------------------这个是打印出获取的json
}
}).start();
}
});
}
//好了上面就是做准备的线程工作不想讲解。。想知道的问我。
public void getmethods(){
HttpResponse httpResponse = null;
HttpClient client=new DefaultHttpClient();//----------httpclient访问
try {
// 设置httpPost请求参数
List<NameValuePair> params=new ArrayList<NameValuePair>(); //这个是带有参数的请求--必须用NameValuePair类
params.add(new BasicNameValuePair("ID", "201096064031")); //设置参数
HttpPost httppost = new HttpPost(); //创建post请求对象
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //设置参数编码
// 创建一个GET请求
Log.i("json", "发送情求");
HttpPost request = new HttpPost("http://192.168.1.xxx:8080/Test/TestServlet");//这是没有参数的请求--------------和httppost对比下
httpResponse =client.execute(request); //参数:是不含参 换成httppost就是有参数请求
if (httpResponse.getStatusLine().getStatusCode() == 200) { //---------------------200大家懂的这是 请求成功
// 使用getEntity方法活得返回结果
result = EntityUtils.toString(httpResponse.getEntity()); //获取返回数据
Log.i("json", "数据是:"+result);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void getjson(){ //这是第二种获取服务器json的方法---------用connection---------------------第二种
String json1=null;
String json2="";
try {
Log.i("json", "1初始化url");
URL url=new URL("http://192.168.1.XXX:8080/Test/TestServlet");
Log.i("json", "2建立连接");
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setConnectTimeout(3000);
Log.i("json", "3设置请求方法");
con.setRequestMethod("GET");
if(con.getResponseCode() == 200){//不做解释了------------
Stu stu;//---------------这是测试用的实体类
java.io.InputStream in = con.getInputStream(); //--读取到inputstream流中
BufferedReader buffer=new BufferedReader(new InputStreamReader(in));//--读取到字符流中
while((json1=buffer.readLine())!=null)//---读取字符流
{
if(json1.length()>0){
json2=json2+json1;
}
}
JSONArray array=new JSONArray(json2);将json2解析成json类型
List<Stu> list=new ArrayList<Stu>();
for(int i=0;i<array.length();i++){ //-------------------将json解析成实体放到list里面
JSONObject json=array.getJSONObject(i);
stu=new Stu();
stu.setId(json.getString("Id"));
stu.setName(json.getString("Name"));
stu.setAge(json.getString("Age"));
list.add(stu);
}
Log.i("json", "读取数据完毕"+list.get(0).getId());
}
else {
Log.i("json", "网络读取发生错误");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("json", "最终得到字符数据");
}
@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;
}
}
如果需求源代码请告诉我。包含服务器端servlet 点击打开链接