android 手机端获取服务器端的json数据

这两天学了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    点击打开链接

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值