zoukankan      html  css  js  c++  java
  • 个人技术博客(α)

    项目联系

    团队刚开始分配我负责前端网页的开发,我开始学习HTML、css和JS这些知识。后来我们团队决定放弃前端网页,因此我辗转到移动端,开始学安卓。因为起步比较晚,所以学的内容不是很扎实,为了跟上团队的步伐,在学习完基础的界面布局、事件和控件后,开始了网络请求的编码。

    网络请求

    我们团队使用OKHTTP处理网络请求,OKHTTP是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架。资料上显示,OkHttp 处理了很多网络疑难杂症,会从很多常用的连接问题中自动恢复。如果服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。
    (1)HTTP GET

    OkHttpClient client = new OkHttpClient();
     
    String run(String url) throws IOException {
        Request request = new Request.Builder().url(url).build();
        Response response = client.newCall(request).execute();  
        if (response.isSuccessful()) {        return response.body().string();
        } 
        else {        throw new IOException("Unexpected code " + response);
        }
    }
    

    Request是OkHttp中访问的请求,Builder是辅助类。Response即OkHttp中的响应。
    (2)HTTP POST
    POST提交Json数据

    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    OkHttpClient client = new OkHttpClient();
    String post(String url, String json) throws IOException {
         RequestBody body = RequestBody.create(JSON, json);
          Request request = new Request.Builder().url(url).post(body).build();
          Response response = client.newCall(request).execute();
        f (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }
    

    使用Request的post方法来提交请求体RequestBody

    (3)我们团队使用Gson来解析JSON响应

    private final OkHttpClient client = new OkHttpClient();
    private final Gson gson = new Gson();
     
    public void run() throws Exception {
        Request request = new Request.Builder()
        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
     
        Gist gist = gson.fromJson(response.body().charStream(), Gist.class);
        for (Map.Entry<String, GistFile> entry : gist.files.entrySet()) {
          System.out.println(entry.getKey());
          System.out.println(entry.getValue().content);
        }
    }
     
    static class Gist {
        Map<String, GistFile> files;
    }
     
    static class GistFile {
        String content;
    }
    

    ResponseBody.charStream()使用响应头Content-Type指定的字符集来解析响应体。

    (4)这是我们的登录活动的Java代码:

    package com.maple27.fzuyibao.view.activity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    
    import com.maple27.fzuyibao.R;
    import com.maple27.fzuyibao.presenter.util.ActivityController;
    import com.maple27.fzuyibao.presenter.util.StatusBarUtil;
    
    /**
     * Created by Maple27 on 2017/11/3.
     */
    
    public class LoginActivity extends AppCompatActivity {
    
        private Button login;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityController.addActivity(this);
            setContentView(R.layout.activity_login);
            StatusBarUtil.setStatusBar(this);
            login = (Button) findViewById(R.id.login);
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                }
            });
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityController.removeActivity(this);
        }
    }
    

    这是我设计的登录界面的测试版本(仅供参考)

    总结

    以上是目前我学到的技术与团队项目的关系,网络请求还需要不断完善。

  • 相关阅读:
    Struts2+Spring3+Mybatis3开发环境搭建
    spring+struts2+mybatis
    【LeetCode】Populating Next Right Pointers in Each Node
    【LeetCode】Remove Duplicates from Sorted Array
    【LeetCode】Remove Duplicates from Sorted Array II
    【LeetCode】Binary Tree Inorder Traversal
    【LeetCode】Merge Two Sorted Lists
    【LeetCode】Reverse Integer
    【LeetCode】Same Tree
    【LeetCode】Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/dhq409/p/7828572.html
Copyright © 2011-2022 走看看