android https post使用OkHttp post遇到403禁止怎么回事?

求助帖:OkHttp3请求网络失败,但在浏览器与postman中成功请求【android开发吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:117,179贴子:
求助帖:OkHttp3请求网络失败,但在浏览器与postman中成功请求收藏
public static void sendOkHttpRequest(String address, Callback callback){
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);}这是OkHttp3请求代码,我确定没问题,
安卓开发技术新,市场占有率大!慕课网专业讲师全力打造Android入门到精通课程!系统化学习,精心服务,结合真实开发案例,提升学习效果,带你快速入行!直达名企!
然后在MainActivity中调用 private void queryFromServer(String type){
final String address=&&+type+&&size=3&offset=0&;//这是请求网址 在postman和浏览器中能成功返回结果
Utilty.sendOkHttpRequest(address, new Callback() {//调用上面的方法
public void onFailure(Call call, IOException e) {
e.printStackTrace();
public void onResponse(Call call, Response response) throws IOException {
final String responseText=response.body().string();
Log.e(&返回结果:&,responseText)
然后Log结果就是这样为啥啊啊啊啊啊啊啊 啊08-30 09:55:36.337 / E/返回结果:: &html&
&head&&title&403 Forbidden&/title&&/head&
&body bgcolor=&white&&
&center&&h1&403 Forbidden&/h1&&/center&
&hr&&center&nginx&/center&
关键是我换了个网址它就能请求成功
可是这个网址也没问题啊
我找了类似的问题 有人说好像要加请求头 具体是什么啊 问人家人家也眉回我我要被折磨疯了 哪位大神帮帮我啊
登录百度帐号推荐应用OkHttp的基本使用(二)Post请求_Android开发_动态网站制作指南
OkHttp的基本使用(二)Post请求
来源:人气:182
上篇【OkHttp的基本使用一】介绍了OkHttp的Get请求方式,也是OkHttp基本使用的开端,如果是第一次使用OkHttp的同学可以先从OkHttp的基本使用一开始阅读,此篇主要介绍OkHttp的Post请求方式。
在介绍OkHttp的Post请求的基本使用之前,我们需要了解什么是Post,以及什么是Get?对于android程序员来说,对这2个概念不像web工程师那样熟悉,在这里我们先简要说明Post和Get请求的区别:
Post或者Get只是Http协议中向后台服务器发送数据的一种机制,是Http协议的一个组成部分。
Post请求是将要提交到后台服务器的数据放在Http包的包体中。
Get请求是将数据放在URL之后,比如/forum.?mo ... d=11&extra=page%3D1,可以看到此URL由2部分组成,分别是/forum.php和?后面的参数。这就是典型的Get请求方式。
因为Get请求时直接将参数放在URL后面,而URL的长度是有一定的限制,所以当传递的数据特别大的时候,Get请求就不能完成。
相比较,Post请求的参数是放在Http包的内部,不能轻易被看到;Get请求的参数直接是跟在URL之后,可以很容易被用户获取。所以,相对而言,Post的请求方式更安全。
在实际项目开发过程中,什么时候使用Get、什么时候使用Post呢?
Post(当涉及到参数的安全问题或者参数比较大的时候,应该使用Post请求方式),比如:
Get(Get就是获取的意思,项目开发中,如果是相对简单的查询类接口可以使用Get请求方式),比如:
获取文章详情
以上就是Get和Post的一个简单的介绍,对刚入门的android程序员应该会有点帮助。然后,接下来我们开始OkHttp的Post请求方式的学习。
Post的同步请求方式(在android的主线程中,需要将下面的代码放在new Thread的run方法中执行,否则报错(错误详见))
OkHttpClient okHttpClient = new OkHttpClient();
& && &&&//Form表单格式的参数传递
& && &&&FormBody formBody = new FormBody
& && && && && & .Builder()
& && && && && & .add(&goodsId&,&2799&)//设置参数名称和参数值
& && && && && & .build();
& && &&&Request request = new Request
& && && && && & .Builder()
&font color=&royalblue&&& && && && && & .post(formBody)//Post请求的参数传递,此处是和Get请求相比,多出的一句代码&/font&
.url(Config.POST_URL)
& && && && && & .build();
& && &&&try {
& && && && &Response response = okHttpClient.newCall(request).execute();
& && && && &String result = response.body().string();
& && && && &Log.d(&&,result);
& && && && &response.body().close();
& && &&&} catch (IOException e) {
& && && && &e.intStackTrace();
以上是一个Post同步请求方式代码。Post请求的重点在参数的传递方式,也就是代码的第9行.post()方法。post()方法中的参数是要传递到后台服务器的参数,是一个RequestBody类型的参数。其他的代码同Get请求的基本一致。
在实际项目开发中,只要是使用Post请求方式的,都涉及参数传递。文章开头也说了,Post和Get请求的最大的不同点就在参数传递,所以接下来我们介绍一下Post的各种格式的参数传递。(注意:对于初学者,将视线重点放在Post和Get的参数传递方式上来学习OkHttp请求可能要更直观一些,也可能更容易理解)。
Form表单数据的传递(上面的代码中的FormBody就是表单参数的设置方式,表单数据的传递就不重复帖代码,代码同上)
Json格式数据的传递
//设置媒体类型。/json表示传递的是一个json格式的对象
& && &&&MediaType mediaType = MediaType.parse(&application/json&);
& && &&&//使用JSONObject封装参数
& && &&&JSONObject jsonObject = new JSONObject();
& && &&&try {
& && && && &jsonObject.put(&参数名&,&参数值&);
& && &&&} catch (JSONException e) {
& && && && &e.printStackTrace();
& && &&&//创建RequestBody对象,将参数按照指定的MediaType封装
& && &&&RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
& && &&&Request request = new Request
& && && && && & .Builder()
& && && && && & .post(requestBody)//Post请求的参数传递
& && && && && & .url(Config.POST_URL)
& && && && && & .build();
& && &&&try {
& && && && &Response response = okHttpClient.newCall(request).execute();
& && && && &String result = response.body().string();
& && && && &Log.d(&&,result);
& && && && &response.body().close();
& && &&&} catch (IOException e) {
& && && && &e.printStackTrace();
以上代码就是Json格式的数据传递。代码中的MediaType指定传递的数据类型,是一种MIME类型,比如application/json、application/octet-stream、application/等详细参考这里。
对比Form表单数据传递和Json格式数据传递,对于纯粹的android程序员来说,可能觉得一个使用的是FormBody、一个使用的是RequestBody+Json,好像没有什么不同,都是key:value格式。但是对于Web后台接收的方式会有所不同,所以将原本应该是Form表单参数改成Json参数传递,后台将接受不到前端传递的参数,因为其媒体类型(MediaType)不一样。
String字符串传递
如果传递的就是一个纯粹的String字符串,可以将MediaType类型换成“text/plain&.
说明:对于android程序员怎么知道该使用Form表单格式的数据传递方式,还是Json格式的数据传递方式?这个问题取决于后台的数据接收逻辑;所以,在实际开发中如果没有特殊说明的情况下,默认采用表单格式的数据传递;如果有特殊说明,那根据说明内容进行传递。不过,目前大多数公司要么采用form表单,要么采用Json(说白了,Json其实就是一个特殊格式的String对象)。
Post异步请求
Post异步请求只需要将同步请求中的execute方法换成enqueue方法。
OkHttpClient okHttpClient = new OkHttpClient();
& && &&&//Form表单格式的参数传递
& && &&&FormBody formBody = new FormBody
& && && && && & .Builder()
& && && && && & .add(&username&,&&)//设置参数名称和参数值
& && && && && & .build();
& && &&&Request request = new Request
& && && && && & .Builder()
& && && && && & .post(formBody)//Post请求的参数传递
& && && && && & .url(Config.LOCALHOST_POST_URL)
& && && && && & .build();
& && &&&okHttpClient.newCall(request).enqueue(new Callback() {
& && && && &@Override
& && && && &public void onFailure(Call call, IOException e) {}
& && && && &@Override
& && && && &public void onResponse(Call call, Response response) throws IOException {
& && && && && & //此方法运行在子线程中,不能在此方法中进行UI操作。
& && && && && & String result = response.body().string();
& && && && && & Log.d(&&, result);
& && && && && & response.body().close();
& && && && &}
& && &&&});
OkHttp是一个类似HttpUrlConnection的一个框架。
OkHttp是一个可以在项目和Android项目中使用的框架。所以其内部并没有Handler类来完成线程间的通信。所以,对于android而言,其返回的结果都是在子线程中。需要程序人自己写Handler完成数据传递。
OkHttp的Post和Get请求都有2中方式:同步和异步。其中同步请求不能直接在UI线程中进行。
Get和Post只是Http协议中的一块,2者的主要区别在数据的传递。学些的时候,可以从数据的传递入手去理解它们。
OkHttp使用建议在一个项目中只有一个OkHttp对象。使用前可以对OkHttp进行封装。
简易封装代码如下:
* Created by yangjw on .
* desc:TODO
public class OkHttpUtil {
& & //保证OkHttpClient是唯一的
& & private static OkHttpClient okHttpC
& & static Handler mHandler = new Handler();
& & static {
& && &&&if (okHttpClient == null) {
& && && && &okHttpClient = new OkHttpClient();
& &&&* Get请求
& &&&* @param url
& &&&* @param callback 回调函数
& & public static void httpGet(String url, final IOkCallBack callback) {
& && &&&if (callback == null) throw new NullPointerException(&callback is null&);
& && &&&Request request = new Request.Builder().url(url).build();
& && &&&okHttpClient.newCall(request).enqueue(new Callback() {
& && && && &@Override
& && && && &public void onFailure(Call call, final IOException e) {
& && && && && & mHandler.post(new Runnable() {
& && && && && && &&&@Override
& && && && && && &&&public void run() {
& && && && && && && && &callback.onException(e);
& && && && && && &&&}
& && && && && & });
& && && && &}
& && && && &@Override
& && && && &public void onResponse(Call call, Response response) throws IOException {
& && && && && & final String result = response.body().string();
& && && && && & mHandler.post(new Runnable() {
& && && && && && &&&@Override
& && && && && && &&&public void run() {
& && && && && && && && &callback.onSuccess(result);
& && && && && && &&&}
& && && && && & });
& && && && && & response.body().close();
& && && && &}
& && &&&});
& &&&* Post请求
& &&&* @param url
& &&&* @param params 参数
& &&&* @param callback 回调函数
& & public static void httpPost(String url,Map&String,String& params,final IOkCallBack callback) {
& && &&&if (callback == null) throw new NullPointerException(&callback is null&);
& && &&&if (params == null) throw new NullPointerException(&params is null&);
& && &&&FormBody.Builder formBodyBuilder = new FormBody.Builder();
& && &&&Set&String& keySet = params.keySet();
& && &&&for(String key:keySet) {
& && && && &String value = params.get(key);
& && && && &formBodyBuilder.add(key,value);
& && &&&FormBody formBody = formBodyBuilder.build();
& && &&&Request request = new Request
& && && && && & .Builder()
& && && && && & .post(formBody)
& && && && && & .url(url)
& && && && && & .build();
& && &&&okHttpClient.newCall(request).enqueue(new Callback() {
& && && && &@Override
& && && && &public void onFailure(Call call, final IOException e) {
& && && && && & mHandler.post(new Runnable() {
& && && && && && &&&@Override
& && && && && && &&&public void run() {
& && && && && && && && &callback.onException(e);
& && && && && && &&&}
& && && && && & });
& && && && &}
& && && && &@Override
& && && && &public void onResponse(Call call, Response response) throws IOException {
& && && && && & final String result = response.body().string();
& && && && && & mHandler.post(new Runnable() {
& && && && && && &&&@Override
& && && && && && &&&public void run() {
& && && && && && && && &callback.onSuccess(result);
& && && && && && &&&}
& && && && && & });
& && && && && & response.body().close();
& && && && &}
& && &&&});
本文章的:Github
优质网站模板看了一篇博文,记录一下okHttp的使用。 原文地址:
里边介绍了okHttp基本使用和一些封装,我主要看的是他封装的那部分,OkHttpClientManager.java
1 import android.os.H
2 import android.os.L
4 import com.google.gson.G
5 import com.google.gson.internal.$Gson$T
6 import com.squareup.okhttp.C
7 import com.squareup.okhttp.C
8 import com.squareup.okhttp.FormEncodingB
9 import com.squareup.okhttp.H
10 import com.squareup.okhttp.MediaT
11 import com.squareup.okhttp.MultipartB
12 import com.squareup.okhttp.OkHttpC
13 import com.squareup.okhttp.R
14 import com.squareup.okhttp.RequestB
15 import com.squareup.okhttp.R
17 import org.json.JSONE
19 import java.io.F
20 import java.io.FileOutputS
21 import java.io.IOE
22 import java.io.InputS
23 import java.lang.reflect.ParameterizedT
24 import java.lang.reflect.T
25 import java.net.CookieM
26 import java.net.CookieP
27 import java.net.FileNameM
28 import java.net.URLC
29 import java.util.HashM
30 import java.util.M
31 import java.util.S
* Created by Lee on .
36 public class OkHttpClientManager
private static OkHttpClientManager mI
private OkHttpClient mOkHttpC
private Handler mD
private Gson mG
private static final String TAG = "OkHttpClientManager";
private OkHttpClientManager()
mOkHttpClient = new OkHttpClient();
//cookie enabled
mOkHttpClient.setCookieHandler(new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER));
mDelivery = new Handler(Looper.getMainLooper());
mGson = new Gson();
public static OkHttpClientManager getInstance()
if (mInstance == null)
synchronized (OkHttpClientManager.class)
if (mInstance == null)
mInstance = new OkHttpClientManager();
* 同步的Get请求
* @param url
* @return Response
private Response _getAsyn(String url) throws IOException
final Request request = new Request.Builder()
Call call = mOkHttpClient.newCall(request);
Response execute = call.execute();
* 同步的Get请求
* @param url
* @return 字符串
private String _getAsString(String url) throws IOException
Response execute = _getAsyn(url);
return execute.body().string();
* 异步的get请求
* @param url
* @param callback
private void _getAsyn(String url, final ResultCallback callback)
final Request request = new Request.Builder()
deliveryResult(callback, request);
* 同步的Post请求
* @param url
* @param params post的参数
private Response _post(String url, Param... params) throws IOException
Request request = buildPostRequest(url, params);
Response response = mOkHttpClient.newCall(request).execute();
* 同步的Post请求
* @param url
* @param params post的参数
* @return 字符串
private String _postAsString(String url, Param... params) throws IOException
Response response = _post(url, params);
return response.body().string();
* 异步的post请求
* @param url
* @param callback
* @param params
private void _postAsyn(String url, final ResultCallback callback, Param... params)
Request request = buildPostRequest(url, params);
deliveryResult(callback, request);
* 异步的post请求
* @param url
* @param callback
* @param params
private void _postAsyn(String url, final ResultCallback callback, Map&String, String& params)
Param[] paramsArr = map2Params(params);
Request request = buildPostRequest(url, paramsArr);
deliveryResult(callback, request);
* 同步基于post的文件上传
* @param params
private Response _post(String url, File[] files, String[] fileKeys, Param... params) throws IOException
Request request = buildMultipartFormRequest(url, files, fileKeys, params);
return mOkHttpClient.newCall(request).execute();
private Response _post(String url, File file, String fileKey) throws IOException
Request request = buildMultipartFormRequest(url, new File[]{file}, new String[]{fileKey}, null);
return mOkHttpClient.newCall(request).execute();
private Response _post(String url, File file, String fileKey, Param... params) throws IOException
Request request = buildMultipartFormRequest(url, new File[]{file}, new String[]{fileKey}, params);
return mOkHttpClient.newCall(request).execute();
* 异步基于post的文件上传
* @param url
* @param callback
* @param files
* @param fileKeys
* @throws IOException
private void _postAsyn(String url, ResultCallback callback, File[] files, String[] fileKeys, Param... params) throws IOException
Request request = buildMultipartFormRequest(url, files, fileKeys, params);
deliveryResult(callback, request);
* 异步基于post的文件上传,单文件不带参数上传
* @param url
* @param callback
* @param file
* @param fileKey
* @throws IOException
private void _postAsyn(String url, ResultCallback callback, File file, String fileKey) throws IOException
Request request = buildMultipartFormRequest(url, new File[]{file}, new String[]{fileKey}, null);
deliveryResult(callback, request);
* 异步基于post的文件上传,单文件且携带其他form参数上传
* @param url
* @param callback
* @param file
* @param fileKey
* @param params
* @throws IOException
private void _postAsyn(String url, ResultCallback callback, File file, String fileKey, Param... params) throws IOException
Request request = buildMultipartFormRequest(url, new File[]{file}, new String[]{fileKey}, params);
deliveryResult(callback, request);
* 异步下载文件
* @param url
* @param destFileDir 本地文件存储的文件夹
* @param callback
private void _downloadAsyn(final String url, final String destFileDir, final ResultCallback callback)
final Request request = new Request.Builder()
final Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback()
public void onFailure(final Request request, final IOException e)
sendFailedStringCallback(request, e, callback);
public void onResponse(Response response)
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
is = response.body().byteStream();
File file = new File(destFileDir, getFileName(url));
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1)
fos.write(buf, 0, len);
fos.flush();
//如果下载文件成功,第一个参数为文件的绝对路径
sendSuccessResultCallback(file.getAbsolutePath(), callback);
} catch (IOException e)
sendFailedStringCallback(response.request(), e, callback);
if (is != null) is.close();
} catch (IOException e)
if (fos != null) fos.close();
} catch (IOException e)
private String getFileName(String path)
int separatorIndex = path.lastIndexOf("/");
return (separatorIndex & 0) ? path : path.substring(separatorIndex + 1, path.length());
* 加载图片
* @param view
* @param url
* @throws IOException
private void _displayImage(final ImageView view, final String url, final int errorResId)
final Request request = new Request.Builder()
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback()
public void onFailure(Request request, IOException e)
setErrorResId(view, errorResId);
public void onResponse(Response response)
InputStream is =
is = response.body().byteStream();
ImageUtils.ImageSize actualImageSize = ImageUtils.getImageSize(is);
ImageUtils.ImageSize imageViewSize = ImageUtils.getImageViewSize(view);
int inSampleSize = ImageUtils.calculateInSampleSize(actualImageSize, imageViewSize);
is.reset();
} catch (IOException e)
response = _getAsyn(url);
is = response.body().byteStream();
BitmapFactory.Options ops = new BitmapFactory.Options();
ops.inJustDecodeBounds =
ops.inSampleSize = inSampleS
final Bitmap bm = BitmapFactory.decodeStream(is, null, ops);
mDelivery.post(new Runnable()
public void run()
view.setImageBitmap(bm);
} catch (Exception e)
setErrorResId(view, errorResId);
if (is != null) try
is.close();
} catch (IOException e)
e.printStackTrace();
private void setErrorResId(final ImageView view, final int errorResId)
mDelivery.post(new Runnable()
public void run()
view.setImageResource(errorResId);
//*************对外公布的方法************
public static Response getAsyn(String url) throws IOException
return getInstance()._getAsyn(url);
public static String getAsString(String url) throws IOException
return getInstance()._getAsString(url);
public static void getAsyn(String url, ResultCallback callback)
getInstance()._getAsyn(url, callback);
public static Response post(String url, Param... params) throws IOException
return getInstance()._post(url, params);
public static String postAsString(String url, Param... params) throws IOException
return getInstance()._postAsString(url, params);
public static void postAsyn(String url, final ResultCallback callback, Param... params)
getInstance()._postAsyn(url, callback, params);
public static void postAsyn(String url, final ResultCallback callback, Map&String, String& params)
getInstance()._postAsyn(url, callback, params);
public static Response post(String url, File[] files, String[] fileKeys, Param... params) throws IOException
return getInstance()._post(url, files, fileKeys, params);
public static Response post(String url, File file, String fileKey) throws IOException
return getInstance()._post(url, file, fileKey);
public static Response post(String url, File file, String fileKey, Param... params) throws IOException
return getInstance()._post(url, file, fileKey, params);
public static void postAsyn(String url, ResultCallback callback, File[] files, String[] fileKeys, Param... params) throws IOException
getInstance()._postAsyn(url, callback, files, fileKeys, params);
public static void postAsyn(String url, ResultCallback callback, File file, String fileKey) throws IOException
getInstance()._postAsyn(url, callback, file, fileKey);
public static void postAsyn(String url, ResultCallback callback, File file, String fileKey, Param... params) throws IOException
getInstance()._postAsyn(url, callback, file, fileKey, params);
public static void displayImage(final ImageView view, String url, int errorResId) throws IOException
getInstance()._displayImage(view, url, errorResId);
public static void displayImage(final ImageView view, String url)
getInstance()._displayImage(view, url, -1);
public static void downloadAsyn(String url, String destDir, ResultCallback callback)
getInstance()._downloadAsyn(url, destDir, callback);
//****************************
private Request buildMultipartFormRequest(String url, File[] files,
String[] fileKeys, Param[] params)
params = validateParam(params);
MultipartBuilder builder = new MultipartBuilder()
.type(MultipartBuilder.FORM);
for (Param param : params)
builder.addPart(Headers.of("Content-Disposition", "form- name=\"" + param.key + "\""),
RequestBody.create(null, param.value));
if (files != null)
RequestBody fileBody = null;
for (int i = 0; i & files. i++)
File file = files[i];
String fileName = file.getName();
fileBody = RequestBody.create(MediaType.parse(guessMimeType(fileName)), file);
//TODO 根据文件名设置contentType
builder.addPart(Headers.of("Content-Disposition",
"form- name=\"" + fileKeys[i] + "\"; filename=\"" + fileName + "\""),
fileBody);
RequestBody requestBody = builder.build();
return new Request.Builder()
.post(requestBody)
private String guessMimeType(String path)
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String contentTypeFor = fileNameMap.getContentTypeFor(path);
if (contentTypeFor == null)
contentTypeFor = "application/octet-stream";
return contentTypeF
private Param[] validateParam(Param[] params)
if (params == null)
return new Param[0];
else return
private Param[] map2Params(Map&String, String& params)
if (params == null) return new Param[0];
int size = params.size();
Param[] res = new Param[size];
Set&Map.Entry&String, String&& entries = params.entrySet();
int i = 0;
for (Map.Entry&String, String& entry : entries)
res[i++] = new Param(entry.getKey(), entry.getValue());
private static final String SESSION_KEY = "Set-Cookie";
private static final String mSessionKey = "JSESSIONID";
private Map&String, String& mSessions = new HashMap&String, String&();
private void deliveryResult(final ResultCallback callback, Request request)
mOkHttpClient.newCall(request).enqueue(new Callback()
public void onFailure(final Request request, final IOException e)
sendFailedStringCallback(request, e, callback);
public void onResponse(final Response response)
final String string = response.body().string();
if (callback.mType == String.class)
sendSuccessResultCallback(string, callback);
Object o = mGson.fromJson(string, callback.mType);
sendSuccessResultCallback(o, callback);
} catch (IOException e)
sendFailedStringCallback(response.request(), e, callback);
} catch (com.google.gson.JsonParseException e)//Json解析的错误
sendFailedStringCallback(response.request(), e, callback);
private void sendFailedStringCallback(final Request request, final Exception e, final ResultCallback callback)
mDelivery.post(new Runnable()
public void run()
if (callback != null)
callback.onError(request, e);
private void sendSuccessResultCallback(final Object object, final ResultCallback callback)
mDelivery.post(new Runnable()
public void run()
if (callback != null)
callback.onResponse(object);
} catch (JSONException e) {
e.printStackTrace();
private Request buildPostRequest(String url, Param[] params)
if (params == null)
params = new Param[0];
FormEncodingBuilder builder = new FormEncodingBuilder();
for (Param param : params)
builder.add(param.key, param.value);
RequestBody requestBody = builder.build();
return new Request.Builder()
.post(requestBody)
public static abstract class ResultCallback&T&
public ResultCallback()
mType = getSuperclassTypeParameter(getClass());
static Type getSuperclassTypeParameter(Class&?& subclass)
Type superclass = subclass.getGenericSuperclass();
if (superclass instanceof Class)
throw new RuntimeException("Missing type parameter.");
ParameterizedType parameterized = (ParameterizedType)
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
public abstract void onError(Request request, Exception e);
public abstract void onResponse(T response) throws JSONE
public static class Param
public Param()
public Param(String key, String value)
this.key =
this.value =
OkHttpClientManager.getAsyn("yourUrl", new OkHttpClientManager.ResultCallback&String&() {
public void onError(Request request, Exception e) {
e.printStackTrace();
public void onResponse(String response) throws JSONException {
JSONObject root = new JSONObject(response);
if (root.getInt("code") == 0){
JSONObject dataObject = root.getJSONObject("data");
if(dataObject == null){
Log.e(TAG, "ERROR:dataObject is null.");
HomeModel homeModel = new HomeModel(dataObject);
initPager(homeModel.getMarquees());
Log.e(TAG, "ERROR:code is not 0.");
原文中可在onResponse中传递model,但是因为我这里服务器传过来的json不大一样,所以用了String,然后自己解析json
阅读(...) 评论()}

我要回帖

更多关于 android post json 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信