[Android] Zuosa API获取一条指定的消息

2009-11-08

Google于2007年11月5日推出基于Linux平台的开源手机操作系统,即Android。同时发布android软件开发工具包SDK(2.0版已发布),便于手机应用程序开发者进行基于android的手机应用程序开发。

下面代码是根据zuosa提供的API,希望开发出基于android平台上的zuosa客户端,路漫漫其修远兮。程序主要是对api返回数据的处理,这里是json格式数据。对于JAVA,有很多第三方的程序包可以很方便的处理json数据。其实在android SDK中同样提供了json数据处理方法,只不过可能会稍显的有些复杂。

public String process() {
  String myString="";
  try{
     //获取指定id为34230762的消息
     URL url = new URL("http://api.zuosa.com/statuses/show.json?id=34230762");
     //使用HttpURLConnection类建立连接
     HttpURLConnection conn = (HttpURLConnection)url.openConnection();
     conn.connect();
     StringBuffer totalXML = new StringBuffer("");
     if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
        InputStream httpStream = conn.getInputStream();
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(httpStream));
        String currLine = "";
        while((currLine=bufferReader.readLine())!=null)
                    totalXML.append(currLine);
     }
     myString=totalXML.toString(); 
     //关闭连接
     conn.disconnect();
     //myString为String格式,需要先转换为JSONObject便于处理
     JSONObject jsonObject=new JSONObject(myString);
     myString="";
     //keys方法:返回json格式数据中的所有key
     Iterator l=jsonObject.keys();
     //readjson读取对应key的值,即zuosa消息内容
     myString=readjson(l, jsonObject);
 } catch (JSONException e) {
     myString=e.getMessage();
 } catch(Exception ee) {
     myString=ee.getMessage();
 }
    return myString;
}
public String readjson(Iterator l, JSONObject jsonObject) {
   String myString="";
   Iterator templ=null;
   try {
    //遍历整个json数据
    for (; l.hasNext(); ) {
    	String ll=(String)l.next();
        //因为在zuosa返回的json数据是多维,这里先判断对应key的值是否是json格式数据
    	JSONObject tempJson=jsonObject.optJSONObject(ll);
        //如果对应key的值不存在或者不是一个jsonobject,则返回null
    	if (tempJson!=null) {
    	    templ=tempJson.keys();
            //这里应该可以使用递归,可一直不成功
    	    myString+=readjson2(templ, tempJson);
    	} else {
            //格式化时间,按年月日 时分秒 形式显示
    	    if (ll.equals("created_at")) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
    		Date date=new Date();
                //以key:value显示数据                myString+=ll+":"+sdf.format(date);
    	    }else
    		myString+=ll+":"+jsonObject.getString(ll);
    	}

  }
  }catch (JSONException e) {
     myString=e.getMessage();
  } catch(Exception ee) {
     myString=ee.getMessage();
  }
  return myString;
}
//readjson2跟上面的readjson基本一样。
public String readjson2(Iterator l, JSONObject jsonObject) {
   String myString="";
   Iterator templ=null;
   try {
    for (; l.hasNext(); ) {
    	String ll=(String)l.next();
    	myString+=ll+":"+jsonObject.getString(ll);
    }
   }catch (JSONException e) {
        myString=e.getMessage();
   } catch(Exception ee) {
        myString=ee.getMessage();
   }
  return myString;
}

模拟器上执行结果:

至于在layout中如何布局,就是另外的活儿了。本程序是用的android sdk 1.6

tags: , , , ,
posted in 技术类 by 半醒

8 Comments to "[Android] Zuosa API获取一条指定的消息"

  1. hellong wrote:

    换阵地了?

  2. cooiky wrote:

    测试下评论恢复,邮件通知。

    以后就用这个了

  3. chaoGeegle wrote:

    你好,我请教您个问题:我在网站得到了一个JSON,格式是[{"nickname":"XXX","uri":"....."},{"nickname":"YYY","uri":"....."},{"nickname":"ZZZ","uri":"....."}]这种形式,我想获取nickname的列表,怎么把它解析成一条一条的?还请指教,谢谢

  4. 半醒 wrote:

    这个也是看用哪个语言吧
    像PHP,有函数可以直接处理JSON格式的数据

    JAVA的话,就不是很清楚了

  5. chaoGeegle wrote:

    就是Android语言

  6. webryan wrote:

    随便用一个java的json小库就可以,比如json-simple小的。

  7. 好玩吗 wrote:

    好好的一个博客,整的挺另类。

  8. 好玩吗 wrote:

    哈哈 我也期待呢 博客界的奇葩啊

 
Powered by Wordpress. Theme by Shlomi Noach