HTTP Http Client client new Default Http Client
- Slides: 30
通信(1) • とうぜんアンドロからHTTPを投げる(簡単) Http. Client client = new Default. Http. Client(); Http. Get request = new Http. Get(url); // new Http. Post(uri); request. set. Header("User-Agent", user. Agent); try { Http. Response response = client. execute(request); Status. Line status = response. get. Status. Line(); if (status. get. Status. Code() != HTTP_STATUS_OK) { // えらー } Http. Entity entity = response. get. Entity(); Input. Stream input. Stream = entity. get. Content(); ・・・ } catch (IOException e) { // えらー }
通信(2) • UIスレッドが止まらないよう別スレッドでHTTP – 戻ってきたらHandlerでUIスレッドに紛れ込ませる final Handler handler = new Handler(); final Runnable ui. Runnable = new Runnable() { @Override public void run() { ・・・UI部品の書き換えとか } }; final Thread request. Thread = new Thread() { @Override public void run() { ・・・HTTPの要求、応答の処理 handler. post(ui. Runnable); } }; ・・・ request. Thread. start();
通信(3) • 応答がJSONなら (簡単) String response. Body = ・・・・Input. StreamからStringに変えて・・・・ JSONObject response = new JSONObject(response. Body); JSONObject value 1 = response. get. JSONObject("key 1"); ・・・・ 正直これだけでできちゃうんだけど、、、、 違う方法も試してみよう
Protocol Buffers 独自のデータ項目定義( protoファイル) message Person { required int 32 id = 1; required string name = 2; optional int 32 age = 3; } ・・・ protoツールで 生成 Javaのソース Pythonのソース Cppのソース $ protoc --java_out=src --cpp_out=src --python_out=src. /Persons. proto
試す • オブジェクトをSDカードに出力 Person. Builder builder = Person. new. Builder(); Person p = builder. set. Name("えがわ"). set. Id(1). build(); Output. Stream out = new File. Output. Stream("/sdcard/hoge. txt"); p. write. To(out); out. close(); • SDカードから復元 Input. Stream in = new File. Input. Stream("/sdcard/hoge. txt"); Person p = Person. parse. From(in); in. close();
サービス呼び出し部分 • こんなかんじ Http. Rpc. Channel channel = new Htt. Rpc. Channel(uri); Rpc. Controller controller = ※ 何か指定する My. Rpc. Service service = My. Rpc. Service. new. Stub(channel); service. do. Something(controller, request, new Rpc. Callback<Response>() { public void run(Response response) { ・・・応答を受け取ったときの処理 } });
Http. Rpc. Channel側 • こんなかんじ public class Http. Rpc. Channel implements Rpc. Channel { private final URI uri; public Http. Rpc. Channel(URI uri) { this. uri = uri; } private Response. Handler<Response> handler = new Response. Handler<Response>() { @Override public Response handle. Response(Http. Response response) throws Client. Protocol. Exception, IOException { Http. Entity entity = response. get. Entity(); int length = (int) entity. get. Content. Length(); byte[] buffer = new byte[length]; entity. get. Content(). read(buffer, 0, length); return Response. parse. From(buffer); } }; ・・・・・次のページ
Http. Rpc. Channelの続き ・・・前のページから public void call. Method(Method. Descriptor method, Rpc. Controller controller, Message request, Message prototype, Rpc. Callback<Message> done) { try { ・・・ほんとはメソッド名で分岐 Http. Post post = new Http. Post(uri); Http. Client client = new Default. Http. Client(); byte[] data = request. to. Byte. Array(); Http. Entity entity = new Input. Stream. Entity(new Byte. Array. Input. Stream(data), data. length); post. set. Entity(entity); Response response = client. execute(post, handler); done. run(response ); } catch (Exception e) { // エラー処理 } } } • こんなかんじ
サーバー側は? • サーブレットならこんな感じ(簡単) public class My. Servlet extends Http. Servlet { @Override protected void do. Post(Http. Servlet. Request req, Http. Servlet. Response resp) throws Servlet. Exception, IOException { Request request = Request. parse. From(req. get. Input. Stream()); いれもの = request. げっとほげほげ ・・・ Builder builder = Response. new. Builder(); builder. せっとほげほげ ・・・ builder. build(). write. To(resp. get. Output. Stream()); } }
GAEじゃないとダメ? • 勿論、自分でサーバー書いてもいい Server. Socket server. Socket = new Server. Socket(9001); while (true) { Socket socket = server. Socket. accept(); Data. Input. Stream in = new Data. Input. Stream(socket. get. Input. Stream()); Data. Output. Stream out = new Data. Output. Stream(socket. get. Output. Stream()); int length = in. read. Int(); byte[] buffer = new byte[length]; in. read(buffer, 0, length); Request request = Request. parse. From(buffer); ・・・処理 Response response = Response. new. Builder(). setほげほげ. build(); byte[] data = response. to. Byte. Array(); out. write. Int(data. length); response. write. To(out); in. close(); out. close(); }
- Http://l.sasbu.chevron.net/web/default.aspx
- Vmatrix server manager
- Client lourd vs client léger
- Application layer
- Ptp default profile
- Inflation premium
- Default arguments
- Displaying text in pygame
- Network id adalah
- Credit default swap short
- Bosch rps default password
- Realsoft attendance default password
- Difference between default and parameterized constructor
- Adaudit plus port
- Java default list model
- Kinco hmi default ip address
- Print.php?chapter=
- Bt parental pin
- Case verilog
- Fa vs fba
- Probability of default
- Credit default swap ppt
- Credit default swap
- Default att router password
- Argument "value" is missing, with no default
- Default.php?incl=
- Solidity default visibility
- Config t
- Failed to boot both default and fallback entries
- Credit default swap crypto
- Ruby named parameters with default