DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

今更始めるAndorid

と言う事で、今更感があるがAndroid開発を始めようと思う。
とりあえずTwitterClient作ってみようと思って、いろいろネットで調べてOAuthとかXAuth・JSONと流し読みしてみたが、いかんせんAndroidSDK全然知らないので、まったくわからん。。。

なのできちんと最初から書くように。
Javaも相当久しぶりなのでヤバイ。。。

で、とにかくまずは通信しなきゃ話にならないので他の多くの人がやっているようにHttpClientから。

■HttpClient.java

package com.MyTwitter;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpHost;

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.HttpResponseException;

import android.util.Log;


public class HttpClient
{
private String url;
public HttpClient (String _url)
{
this.url = _url;
}

public String request ()
{
String ret = null;

try
{
Log.d ("MyTwitter", "Start HttpClient::request url = " + url);

DefaultHttpClient http = new DefaultHttpClient ();

/*
HttpHost proxy = new HttpHost ("xxx.xxx.xxx.xxx", xxxx);
http.getParams ().setParameter (ConnRoutePNames.DEFAULT_PROXY, proxy);
*/

HttpGet g = new HttpGet (url);
HttpResponse res = http.execute (g);

// httpレスポンスの400番台以降はエラーだから例外をthrow
if (res.getStatusLine ().getStatusCode () >= 400 )
{
Log.d ("MyTwitter", "HttpClient::request faild !! -> " + String.valueOf (res.getStatusLine ().getStatusCode ()));
Log.d ("MyTwitter", res.getStatusLine ().getReasonPhrase ());
//throw new HttpResponseException (res.getStatusLine ().getStatusCode (), res.getStatusLine ().getReasonPhrase ());
}

// httpレスポンスの400番台以降はエラーだから
HttpEntity entity = res.getEntity ();

// レスポンス本体を取得
InputStream inputstream = entity.getContent ();
InputStreamReader inputstreamreader = new InputStreamReader (inputstream);
BufferedReader bufferedreader = new BufferedReader (inputstreamreader);
StringBuilder stringbuilder = new StringBuilder ();
String sline;
while *1 != null)
{
stringbuilder.append (sline + "\r\n");
}

ret = stringbuilder.toString ();
Log.d ("MyTwitter", "HttpClient::request ret = " + ret);
Log.d ("MyTwitter", "HttpClient::request Success !!");
}
catch (Exception e)
{
Log.d ("MyTwitter", "HttpClient::Exception = " + e.getMessage ());
}

return ret;
}
}


これをextends ActivityしているClassから呼んでみると、ちゃんとxml取れているようだ。
DEBUG/MyTwitter(301): Main xml =
DEBUG/MyTwitter(301):
DEBUG/MyTwitter(301):
DEBUG/MyTwitter(301): Wed Apr 27 07:26:26 +0000 2011
DEBUG/MyTwitter(301): 63141942170624000
DEBUG/MyTwitter(301): 今日は涼しいな
DEBUG/MyTwitter(301): <a href="http://z.twipple.jp/" rel="nofollow">ついっぷる/twipple</a>
DEBUG/MyTwitter(301): false
DEBUG/MyTwitter(301): false


ソース的にはAndroid全然関係ないけど、まずはココから

*1:sline = bufferedreader.readLine (