Android项目记录
来源:互联网 发布:微信淘宝刷 g是真的吗 编辑:程序博客网 时间:2024/05/24 22:43
当前封装了普通的post请求,get请求,上传图片,上传头像,以及Header包含token同时携带body数据,这里凡是含有项目封装的都是转成JSON数据之后传到服务器的。如果只是一般的请求我们只是用的普通的post请求,get请求就可以。
Effect :
Log打印的返回数据:
预备工作
权限加入:
<uses-permission android:name="android.permission.INTERNET" />
build :
compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okio:okio:1.6.0' compile 'com.alibaba:fastjson:1.2.31' compile 'com.alibaba:fastjson:1.1.57.android'
创建接口:
package com.bakheet.effect.okhttpframe;import java.io.IOException;/** * Created by YongLiu on 2017/10/26. */public interface OnResultListener<T> { void onSuccess(String response) throws IOException; void onFailure(Throwable t);}
FastJsonTools(用于解析服务器返回数据的工具类):
package com.bakheet.effect.okhttpframe;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * Created by YongLiu on 2017/9/13. */public class FastJsonTools { /** * 用fastjson 将json字符串解析为一个 JavaBean * * @param jsonString * @param cls * @return */ public static <T> T getBean(String jsonString, Class<T> cls) { T t = null; try { t = JSON.parseObject(jsonString, cls); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return t; } /** * 用fastjson 将json字符串 解析成为一个 List<JavaBean> 及 List<String> * * @param jsonString * @param cls * @return */ public static <T> List<T> getBeans(String jsonString, Class<T> cls) { List<T> list = new ArrayList<T>(); try { list = JSON.parseArray(jsonString, cls); } catch (Exception e) { // TODO: handle exception } return list; } /** * 用fastjson 将jsonString 解析成 List<Map<String,Object>> * * @param jsonString * @return */ public static List<Map<String, Object>> getListMap(String jsonString) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { // 两种写法 // list = JSON.parseObject(jsonString, new // TypeReference<List<Map<String, Object>>>(){}.getType()); list = JSON.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() { }); } catch (Exception e) { // TODO: handle exception } return list; }}
BaseModel(返回的一个基类Model层*) :
package com.bakheet.effect.okhttpframe;public class BaseModel<T> { private String result; private String desc; private String error; private String exception; private String message; private String path; private int status; private String timestamp; private T data; public String getResult() { return result; } public String getDesc() { return desc; } public String getError() { return error; } public String getException() { return exception; } public String getMessage() { return message; } public String getPath() { return path; } public int getStatus() { return status; } public String getTimestamp() { return timestamp; } public void setResult(String result) { this.result = result; } public void setDesc(String desc) { this.desc = desc; } public void setError(String error) { this.error = error; } public void setException(String exception) { this.exception = exception; } public void setMessage(String message) { this.message = message; } public void setPath(String path) { this.path = path; } public void setStatus(int status) { this.status = status; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public T getData() { return data; } public void setData(T data) { this.data = data; }}
调用工作
MainActivity :
package com.bakheet.effect.okhttpframe;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.TextView;import com.alibaba.fastjson.JSON;import java.io.IOException;import java.util.HashMap;import okhttp3.Response;/** * @author YongLiu */public class MainActivity extends AppCompatActivity { private TextView mContent; private TextView mBtn; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); String response = (String) msg.obj; mContent.setText(response); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtn = (TextView) findViewById(R.id.btn); mContent = (TextView) findViewById(R.id.tv_content); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setData("1", handler); } }); } void setData(String tag, final Handler handler) { HashMap map = new HashMap<>(); map.put("tag", tag); String jsonParams = JSON.toJSONString(map); //这个接口是我当前项目用到的一个post请求接口,需要头部带token,然后其余在body中 HttpUtils.doHeadPost("http://api.phc-dow.com/user/comment/page" + "?pageNum=" + 1 + "&" + "pageSize=" + 5, jsonParams, new OnResultListener() { @Override public void onSuccess(String response) throws IOException { Log.e("tag ", "Main =" + response); Message message = new Message(); message.obj = response; handler.sendMessage(message); } @Override public void onFailure(Throwable t) { Log.e("tag ", "Main 失败回调"); } }); }}
MainActivity Xml :
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bakheet.effect.okhttpframe.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:padding="5dp" android:id="@+id/tv_content" /> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#f63" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击" android:padding="8dp" android:gravity="center" android:id="@+id/btn" /></LinearLayout>
关键工作
HttpUtils :
package com.bakheet.effect.okhttpframe;import android.content.Context;import android.text.TextUtils;import android.util.Log;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.FileNameMap;import java.net.URLConnection;import java.util.ArrayList;import java.util.List;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * Created by YongLiu on 2017/9/13. */public class HttpUtils { private static OkHttpClient client = null; private static MultipartBody.Builder builder; private static MediaType media_type; private HttpUtils() { } public static OkHttpClient getInstance() { if (client == null) { synchronized (HttpUtils.class) { if (client == null) { client = new OkHttpClient(); } } } return client; } /** * Get请求 * * @param url * @param callback */ public static void doGet(String url, Callback callback) { Request request = new Request.Builder() .url(url) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * 项目封装 - Get数据 - 头形式上传 */ public static void doHeadGet(String url, Callback callback) { Request request = new Request.Builder() .url(url)// .addHeader("token","4cDA9M") .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * Post请求发送键值对数据 * * @param url * @param mapParams * @param callback */ public static void doPost(String url, Map<String, String> mapParams, Callback callback) { FormBody.Builder builder = new FormBody.Builder(); for (String key : mapParams.keySet()) { builder.add(key, mapParams.get(key)); } Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * Post请求发送JSON数据 * * @param url * @param jsonParams * @param callback */ public static void doPost(String url, String jsonParams, Callback callback) { RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8") , jsonParams); Request request = new Request.Builder() .url(url) .post(body) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * 项目封装 - Post数据 - 头形式上传 */ public static void doHeadPost(String url, String jsonParams, final OnResultListener resultListener) { RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8") , jsonParams); Request request = new Request.Builder() .url(url) .addHeader("token","c794fa2810cdd726a0d9f35614a2e43de2bee65a") .post(body) .build(); Call call = getInstance().newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { resultListener.onFailure(e); } @Override public void onResponse(Call call, Response response) throws IOException { String responseBody = response.body().string(); if (!TextUtils.isEmpty(responseBody)) { BaseModel bean = FastJsonTools.getBean(responseBody, BaseModel.class); String result = bean.getResult(); if ("0".equals(result)) { resultListener.onSuccess(responseBody); } else { Log.e("tag", "result =" + result); Log.e("tag", "Dest =" + bean.getDesc()); } } else { Log.e("tag", "请求返回的是串"); } } }); } /** * 上传文件 * * @param url * @param pathName * @param fileName * @param callback */ public static void doFile(String url, String pathName, String fileName, Callback callback) { //判断文件类型 MediaType mediaType = MediaType.parse(judgeType(pathName)); //创建文件参数 MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(mediaType.type(), fileName, RequestBody.create(mediaType, new File(pathName))); //发出请求参数 Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); /** * 项目封装 - 上传头像 */ public static void doHeadFile(String url, String pathName, String fileName, Callback callback) { //判断文件类型 MediaType mediaType = MediaType.parse(judgeType(pathName)); //创建文件参数 builder = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("avatar", fileName, RequestBody.create(MEDIA_TYPE_PNG, new File(pathName))); //发出请求参数 Request request = new Request.Builder()// .addHeader("token", SharedPreferencesUtil.getString(CarMasterApplication.getContext(), "token")) .url(url) .post(builder.build()) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * 项目封装 - 上传图片 */ public static void doMoreFile(Context context, final String url, List<String> lists, String pathName, String fileName, final Callback callback) { final List<File> endList = new ArrayList<>(); for (int i = 0; i < lists.size(); i++) { //判断文件类型 media_type = MediaType.parse(judgeType(lists.get(i).toString())); } List<File> imgList = new ArrayList<>(); for (int i = 0; i < lists.size(); i++) { File file = new File(lists.get(i)); imgList.add(file); } for (int c = 0; c < imgList.size(); c++) { long length = imgList.get(c).length();// File yasuo = AppUtil.yasuo(imgList.get(c));// endList.add(yasuo); } builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); for (File files : endList) { if (files.exists()) { builder.addFormDataPart("img", files.getName(), RequestBody.create(MEDIA_TYPE_PNG, new File(files.toString()))); } } Request request = new Request.Builder()// .addHeader("token", SharedPreferencesUtil.getString(context, "token")) .url(url) .post(builder.build()) .build(); Call call = getInstance().newCall(request); call.enqueue(callback); } /** * 根据文件路径判断MediaType * * @param path * @return */ private static String judgeType(String path) { FileNameMap fileNameMap = URLConnection.getFileNameMap(); String contentTypeFor = fileNameMap.getContentTypeFor(path); if (contentTypeFor == null) { contentTypeFor = "application/octet-stream"; } return contentTypeFor; } /** * 下载文件 * * @param url * @param fileDir * @param fileName */ public static void downFile(String url, final String fileDir, final String fileName) { Request request = new Request.Builder() .url(url) .build(); Call call = getInstance().newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = null; try { is = response.body().byteStream(); File file = new File(fileDir, fileName); fos = new FileOutputStream(file); while ((len = is.read(buf)) != -1) { fos.write(buf, 0, len); } fos.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { is.close(); } if (fos != null) { fos.close(); } } } }); }}
关键认知扩展工作(双层回调,底层封装状态判断):
/** * 项目封装 - Post数据 - 头形式上传 */ public static void doHeadPost(String url, String jsonParams, final OnResultListener resultListener) { RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8") , jsonParams); Request request = new Request.Builder() .url(url) .addHeader("token", "c794fa2810cdd726a0d9f35614a2e43de2bee65a") .post(body) .build(); Call call = getInstance().newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { resultListener.onFailure(e); } @Override public void onResponse(Call call, Response response) throws IOException { String responseBody = response.body().string(); if (!TextUtils.isEmpty(responseBody)) { BaseModel bean = FastJsonTools.getBean(responseBody, BaseModel.class); String result = bean.getResult(); if ("0".equals(result)) { resultListener.onSuccess(responseBody); } else { Log.e("tag", "result =" + result); Log.e("tag", "Dest =" + bean.getDesc()); } } else { Log.e("tag", "请求返回的是串"); } } }); }
阅读全文
0 0
- android项目记录
- Android项目记录点滴
- Android项目记录
- Android项目记录
- Android开源项目记录
- android 开源项目记录
- Android项目混淆过程记录
- android项目点滴记录2
- Android项目实训记录
- Android 开源项目记录
- Android towards个人项目记录
- Android 开源项目Droidwall初探记录
- android开源项目-旅游记录
- Android项目Ant命令与问题记录
- Android项目自动编译脚本记录
- Android 学习记录-项目颜色红绿白蓝
- Android 学习记录-UDACITY项目0反馈
- 记录创建android项目的先后
- fastjson处理json数据转换传输的格式
- 【数据挖掘岗】数据挖掘岗位需要掌握技能知识(1)
- 声明式事务管理和基于@Transactional注解的使用
- JAVA实现非对称加密
- 修改了JS页面,Appscan重新测试时仍能够扫描出问题
- Android项目记录
- Java实现数字签名
- Java
- 初学类
- 啤酒和饮料
- LoadRunner录制时无法调用IE浏览器
- h5微信游戏|大番薯h5斗地主牛牛十三水安装下载教程
- java写的将文件或文件夹打包成zip的工具类
- mysql外键约束