个人技术博客(α)

项目联系

团队刚开始分配我负责前端网页的开发,我开始学习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);
    }
}

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

总结

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

原文地址:https://www.cnblogs.com/dhq409/p/7828572.html