精华内容
下载资源
问答
  • 安卓端通过okhttp给我提交一个json数据,我作为web后台怎么接收呢,okhttp可以向ajax一样有个data传参用么
  • 2、post请求提交图片,带参数,表单形式提交图片。 与常规请求参数要求不同,记录一下。 原理:将post参数拼接到url中,json或者表单在添加的时候注明头文件。 0、 public static OkHttpClient sOkHttpClient ...

    最近的后台接口要求:

    1、post请求,带参数,请求body提交json。

    2、post请求提交图片,带参数,表单形式提交图片。

    与常规请求参数要求不同,记录一下。

    原理:将post参数拼接到url中,json或者表单在添加的时候注明头文件。

    0、

    public static OkHttpClient sOkHttpClient = new OkHttpClient.Builder()
            .addInterceptor(new Interceptor() {
                public Response intercept(Chain chain) throws IOException {
                    Request request = chain.request();
                    Response response = chain.proceed(request);
                    return response;
                }
            })
            .connectTimeout(4000, TimeUnit.MILLISECONDS)
            .readTimeout(4000, TimeUnit.MILLISECONDS)
            .writeTimeout(4000, TimeUnit.MILLISECONDS)
            .build();

    1、

    /**
     * 适用于需要传参数和json对象的接口
     * Post 异步请求
     *
     * @param apiId
     * @param map        参数
     * @param jsonString json字符串
     * @param callback   异步回调
     */
    public static void asyPostJson(String apiId, Map<String, String> map, String jsonString, Callback callback) {
        if (TextUtils.isEmpty(jsonString)) {
            return;
        }
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody requestBody = RequestBody.create(JSON, jsonString);
        Log.e("======>>", apiId + " 请求json:" + jsonString);
        String url = apiId +"?";
        if (map != null) {
            // map 里面是请求中所需要的 key 和 value
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry entry : entries) {
                String key = valueOf(entry.getKey());
                String value = valueOf(entry.getValue());
                url = url + "&" + key + "=" + value;
            }
        }
        Log.e("", "============URL============" + apiId + ":" + url);
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        sOkHttpClient.newCall(request).enqueue(callback);
    }
    

    2、

    /**
     * 单图上传方法,供参考
     * 已测试A3033P094与A3033P105接口
     *
     * @param map      参数类似apikey
     * @param file     图片文件
     * @param imagekey 图片key,一般为"image"
     * @param callback
     * @ param url
     */
    
    public static void postFile(final String apiId, final Map<String, String> map, File file, String imagekey, Callback callback) {
        MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
        if (file != null) {
            RequestBody body = RequestBody.create(MediaType.parse("multipart-formdata"), file);
            String filename = file.getName();
            // 参数分别为, 请求key ,文件名称 , RequestBody
            requestBody.addFormDataPart(imagekey, filename, body);
        }
        String url = apiId + "?";
        if (map != null) {
            // map 里面是请求中所需要的 key 和 value
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry entry : entries) {
                String key = valueOf(entry.getKey());
                String value = valueOf(entry.getValue());
                //   requestBody.addFormDataPart(key, value);
                url = url + "&" + key + "=" + value;
            }
        }
        Log.e("==========URL==========", "" + apiId + ":" + url);
        Request request = new Request.Builder().url(url).post(requestBody.build()).build();
        sOkHttpClient.newCall(request).enqueue(callback);
    
    }





    展开全文
  • 解决okhttp提交数据时编码错误问题

    千次阅读 2016-08-22 10:42:44
    自定义FromBuild public class OkHttpFormBuilder { private static final MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded"); private final StringBuilder co

    自定义FormBuilder

    public class OkHttpFormBuilder {
        private static final MediaType CONTENT_TYPE
                = MediaType.parse("application/x-www-form-urlencoded");
    
        private final StringBuilder content = new StringBuilder();
    
        private String encoding="utf-8";
    
        public OkHttpFormBuilder(){}
    
        public OkHttpFormBuilder(String encoding){
            if(!TextUtils.isEmpty(encoding)){
                this.encoding=encoding;
            }
        }
    
        /** Add new key-value pair. */
        public OkHttpFormBuilder add(String name, String value) {
            if (content.length() > 0) {
                content.append('&');
            }
            try {
                content.append(URLEncoder.encode(name, encoding))
                        .append('=')
                        .append(URLEncoder.encode(value, encoding));
            } catch (UnsupportedEncodingException e) {
                throw new AssertionError(e);
            }
            return this;
        }
    
        public RequestBody build() {
            if (content.length() == 0) {
                throw new IllegalStateException("Form encoded body must have at least one part.");
            }
    
            // Convert to bytes so RequestBody.create() doesn't add a charset to the content-type.
            byte[] contentBytes = content.toString().getBytes(Charset.forName(encoding));
            return RequestBody.create(CONTENT_TYPE, contentBytes);
        }
    }
    使用

        OkHttpFormBuilder builder = new OkHttpFormBuilder("gb2312");
    
    展开全文
  • android---用okHttp提交Form表单

    千次阅读 2017-03-02 09:46:11
    FormBody requestBody = new FormBody.Builder().add("", ).add("", ).add("", ).build(); Request request = new Request.Builder().url(url).header("Authorization", "Bearer "+token).patch(requestBody).bu
    FormBody requestBody = new FormBody.Builder().add("", ).add("", ).add("", ).build();
        Request request = new Request.Builder().url(url).header("Authorization", "Bearer "+token).patch(requestBody).build();
    展开全文
  • 感觉有点老了,于是试着使用Rxjava+RxAndorid+Retrofit+okhttp实现网络交互。 首先配置好文件,如下所示。注意目前测试成功下面相应的版本,其中okhttp依赖于okio。 /**okhttp+okio+retrofit+rxjava+rxandroid.....

    目前项目使用的是json数据格式来实现移动端与后台的交互。之前使用的是android-async-http。感觉有点老了,于是试着使用Rxjava+RxAndorid+Retrofit+okhttp实现网络交互。

    首先配置好文件,如下所示。注意目前测试成功下面相应的版本,其中okhttp依赖于okio。

        /**okhttp+okio+retrofit+rxjava+rxandroid*/
        implementation files('libs/okio-2.1.0.jar')
        implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
        implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
        implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
        implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    
        implementation files('libs/kotlin-stdlib-1.3.11.jar')
        implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    
        //网络请求
        implementation 'com.squareup.retrofit2:retrofit:2.6.0'
        implementation 'com.squareup.okhttp3:okhttp:3.9.1'

    编写Retrofit帮助类。

    public class RetrofitHelper {
        private static final int DEFAULT_TIME_OUT = 5;//超时时间 5s
        private static final int DEFAULT_READ_TIME_OUT = 10;
        private Retrofit mRetrofit;
        private static RetrofitHelper instance = null;
        private Context mCntext;
       
        static private String BASE_URL=NetURL.URL_BASE;
        public static RetrofitHelper getInstance(Context context){
            if (instance == null){
                instance = new RetrofitHelper(context);
            }
            return instance;
        }
    
    
    
    
    
        private RetrofitHelper(Context mContext){
            this.mCntext=mContext;
            // 创建 OKHttpClient
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);//连接超时时间
            builder.writeTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);//写操作 超时时间
            builder.readTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);//读操作超时时间
    
    
            // 创建Retrofit,这里有一个URL_BASE
            mRetrofit = new Retrofit.Builder()
                    .baseUrl("http://192.168.10.155:8082/")
                    .client(builder.build())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //配置支持RJava2的 Observable
                    .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器,会将返回的数据自动转换为 对应的 class
                    .build();
        }
    
    
        /**
         *  获取对应的Service
         * @param service
         * @param <T>
         * @return
         */
        public  <T> T create(Class<T> service) {
            return mRetrofit.create(service);
        }
    
    
    }
    

    网络连接部分。注意设置好头部。

    public interface HttpService {
        /*上传户籍数据*/
        //需要添加头
        @Headers({"Content-Type: application/json","Accept: application/json"})
        @POST(NetURL.URL_HOLDER_UPLOAD)
        Observable<ResponseBody> UpLoadHolder(@Body RequestBody requestBody);
    }

    发送请求。这里使用Gson转为json格式。

    findViewById(R.id.btn_upload_test).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    List<JSONObject> mapList= UpLoadDataUtils.GetAllData(entityHolderInfoDao, new Creator<EntityHolderInfo>() {
                        @Override
                        public EntityHolderInfo create() {
                            return new EntityHolderInfo();
                        }
                    });
    
                    if (mapList.size()>0){
    
                    }
    
                    Gson gson = new Gson();
    
                    EntityHolderInfo entityHolderInfo=entityHolderInfoDao.loadAll().get(0);
    
                    EntityHolderInfo holderInfo=entityHolderInfo;
    
                    Map<String, Object> attrMaps = new HashMap<>();
                    attrMaps.put("holderinfo_holderid",holderInfo.getHolderinfo_holderid());
                    attrMaps.put("holderinfo_admincode",holderInfo.getHolderinfo_admincode());
                    attrMaps.put("holderinfo_holdertype",holderInfo.getHolderinfo_holdertype());
                    attrMaps.put("holderinfo_isprohome",holderInfo.getHolderinfo_isprohome());
                    attrMaps.put("holderinfo_holderaddres",holderInfo.getHolderinfo_holderaddres());
    
                    String jsonStr = gson.toJson(attrMaps);
                    Map<String, String> params = new HashMap<>();
                    params.put("json",jsonStr);
    
    
                    String requestStr = gson.toJson(params);
    
                    RequestBody requestBody=
                            RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),requestStr);
                   try {
                       RetrofitHelper.getInstance(UploadActivity.this).create(HttpService.class)
                               .UpLoadHolder(requestBody)
                               .subscribeOn(Schedulers.io())
                               .observeOn(AndroidSchedulers.mainThread())
                               .subscribe(new Observer<ResponseBody>() {
                                   @Override
                                   public void onSubscribe(Disposable d) {
                                       int x=0;
                                   }
    
                                   @Override
                                   public void onNext(ResponseBody s) {
                                       int x=0;
                                   }
    
                                   @Override
                                   public void onError(Throwable e) {
                                       int x=0;
                                   }
    
                                   @Override
                                   public void onComplete() {
                                       int x=0;
                                   }
                               });
    
    
                   }catch (Exception e){
                     e.toString();
                   }
                   
                }
            });

    最后是SpringMVC服务后台。

        @RequestMapping(value = "holderUpload.do")
        @ResponseBody
        public Map<String,Object> holderUpload(@RequestBody String json){
            Map<String,Object> map = new LinkedHashTreeMap<>();
            Gson gson = new Gson();
            if(json != null){
                try{
                    Holder holder = gson.fromJson(json,Holder.class);
                    My_holderinfo holderinfo = holder.transformData();
                    holderinfo.setUptime(DateUtil.nowTime());
                    dongdiHolderinfoRe.saveOrUpdate(holderinfo);
    
                    map.put("flag",true);
                    map.put("data","success");
                }
                catch (DataIntegrityViolationException e){
                    e.printStackTrace();
                    map.put("flag",false);
                    map.put("data","101");
                    map.put("error",e.getRootCause().getMessage());
                }
            }
            else{
                map.put("flag",false);
                map.put("data","100");
                map.put("error","传输数据为空");
            }
            return map;
        }

    数据格式。

    SpringMVC接收的到的json数据。

    在onNext函数中,Android接收成功返回数据。

    展开全文
  • OkHttppost提交

    2020-10-04 00:52:08
    post提交 运行截图: 清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.okhttpw"> <uses-...
  • OkHttp Post提交json数据

    万次阅读 2019-01-25 09:54:53
    new Thread() { @Override public void run() { // @Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头 MediaType JSON = ...
  • android okhttp实例

    2017-05-11 15:16:47
    这是一个用okhttp进行网络请求的例子,例子... - okhttp 提交表单 - okhttp 提交文件 - okhttp 下载文件 - okhttp https请求相关 尽量用简单易懂的编码方式,来实现一些常用的网络请求,分享出来希望对大家有帮助。
  • 总是会出现一些莫名奇妙的问题,现在新的项目使用了OKHttp网络框架,发现超级好用,上网再了解下,发现OkHttp口碑真的不错,对比之下HttpClient简直就是弱爆啦,今天就OKHttp post方式提交键值对的使用提出来,...
  • Okhttp

    2018-03-06 09:44:50
    okhttp
  • okhttp

    2021-01-27 11:10:00
    那么分发器它是帮助我们将我们提交okhttp的各种请求去进行一个任务的分配,那么提到并发,就想到了并发编程相关的知识点,想到了多线程,想到了线程池,那么分发器她里面就配置了一个线程池。 我们的异步请求任务...
  • FormBody form = new FormBody.Builder() // 添加参数的键值对 .add("yl_jobId", json.getString("yl_jobId")) .add("public_key", json.getString("public_key")) .add("timestamp", json.getString(...
  • 使用okhttp3 提交表单不会造成中文乱码问题,使用HttpURLConnection提交服务端收到会有乱码问题,这个还未想到解决办法 okhttp3的异常需要设置监听器, client.newCall(request).enqueue(object: Callback{ override...
  • 作为一名android开发者,通过博客记录自己成长的道路,以下是...2.登录的url、sp保存token、okhttp post请求 3.登录的ui界面,功能代码.... 登录界面如下,勿喷 activity_login.xml xml version
  • OkHttp

    2017-01-03 16:16:17
    OkHttp 当前最火Http框架, 由,Square公司推出, OKHttp的项目地址:https://github.com/square/okhttp特点 创建连接池缓存响应数据来减少重复的网络请求 基于Http的文件上传 文件下载 加载图片 支持SPDY, Google...
  • OKHTTP

    2019-03-17 20:51:41
    package com.example.zhoukao2.HTTP; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; public class OKHttp { private static OkHttpClient okHt...
  • android提交框架okhttp

    2018-05-17 20:25:31
    package com.shkf.util; import java.io.IOException; import java.util.List; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.shkf.been.Position...import okhttp3.Call; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,281
精华内容 2,912
关键字:

okhttp提交