最近学习用java来向服务器进行数据的POST和GET的操作。因为师兄有Android开发的经验,他推荐我使用gson来GET数据,但是我尝试使用了一下,觉得没有那么好用,下面写的是使用org.json.jar来GET数据。因为有过ios编程的经验,感觉它GET数据的方法跟ios的很像,所以用起来比较容易理解。
-------------------------------------------------分割线君----------------------------------------------------
org.json的jar包下载地址,猛点这里:org.json.jar
-------------------------------------------------分割线君----------------------------------------------------
GET
从服务器提取数据(下面我用了新浪微博API获取用户微博做例子)
static void readContentFromGet() throws IOException, JSONException
{
//提交地址和属性,一个以上的属性用&隔开
URL url=new URL(KDefine.Kfriends + "?access_token=" + KDefine.Kaccess_token);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//设置超时时间,单位是秒
conn.setConnectTimeout(5000);
//访问提交方式
conn.setRequestMethod("GET");
conn.connect();
//把输入流通过InputStreamReader将其转换为字符流
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
//把字符串提取出来
String result = reader.readLine();
getContentFromResult(result);
}
//把数据逐个整理
static void getContentFromResult(String result) throws JSONException
{
//把字符串转为JSONObject对象
JSONObject jsonObject = new JSONObject(result);
//下面是根据提取出来的json数据格式来进行提取,我提取的数据格式如下图
JSONArray statuses = jsonObject.getJSONArray("statuses");
for(int i = 0 ; i < statuses.length() ; i++)
{
JSONObject obj = statuses.getJSONObject(i);
if(obj.has("deleted"))
continue;
Friends friends = new Friends(obj,obj.getJSONObject("user"));
FriendsList.friendsList.add(friends);
}
}
-------------------------------------------------分割线君----------------------------------------------------
POST
下面是POST数据的方法,使用的例子是新浪微博发送一条新微博的API
static void create(int num , String comment) throws IOException
{
DataOutputStream out = null;
BufferedReader in = null;
try
{
//提交地址
URL url = new URL(KDefine.Kcreate);
/*
下面的url.openConnection()返回的对象实际上是根据URL
的请求协议生成的URLConnection类,故此处最好将其转化
为URLConnection的子类HttpURLConnection
类型的对象,以便用到HttpURLConnection更多的API
*/
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Post 请求不能使用缓存
conn.setUseCaches(false);
//打开写入属性
conn.setDoOutput(true);
//打开读取属性
conn.setDoInput(true);
//访问提交方式
conn.setRequestMethod("POST");
// 设定传送的内容类型是可序列化的java对象(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
conn.setRequestProperty(" Content-Type "," application/x-www-form-urlencoded ");
conn.connect();
// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述的connect()也可以)。
out = new DataOutputStream(conn.getOutputStream());
//设置上传参数,中文转为UTF-8编码
String param = "access_token=" + KDefine.Kaccess_token + "&status=" + URLEncoder.encode(status,"UTF-8");
把数据转为byte
out.writeBytes(param);
out.flush();
//得到返回数据,可以用来判断发送是否成功
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
}
catch(Exception e)
{
System.out.println("POST错误" + e);
e.printStackTrace();
}
finally
{
try
{
if (out != null)
{
out.close();
}
if (in != null)
{
in.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
参考文章:http://www.blogjava.net/supercrsky/articles/247449.html