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);
        }
    }
    

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

    总结

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

  • 相关阅读:
    myeclipse安装
    win下Velocity安装和试用
    win下Java环境安装
    零基础编程指南(By Turtle)
    快速将某个文件夹下的所有文件中的匹配数据替换
    补丁数组(增删改查都较快的数组)
    addView的误区
    NOIP普及组:买铅笔
    由抽奖软件想到的随机算法总结
    Codeforces Round #220 (Div. 2) 解题报告
  • 原文地址:https://www.cnblogs.com/dhq409/p/7828572.html
Copyright © 2011-2022 走看看