Android的okhttp的post请求,php返回json数据。以及遇到的okhttp dispatcher问题,和json解析遇到的问题
2017-02-14 15:03
2831 查看
在build.gradle文件引入:
compile ‘com.squareup.okhttp3:okhttp:3.6.0’
compile ‘com.squareup.okio:okio:1.11.0’
注意:如果没有引入okio的jar包是会报okhttp dispacther错误的,而且还要注意在回调的onResponse()方法中,只能调用一次:response.body().string(),具体原因请看:https://github.com/square/okhttp/issues/1240#issuecomment-233655904
post请求:
报错:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
附上php服务器主要代码:
参考:
okhttp学习参考:
http://www.cnblogs.com/awkflf11/p/5750008.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html
http://blog.csdn.net/song_shui_lin/article/details/52936942
php返回json数据参考:
http://blog.csdn.net/qq_14995933/article/details/51674037
compile ‘com.squareup.okhttp3:okhttp:3.6.0’
compile ‘com.squareup.okio:okio:1.11.0’
注意:如果没有引入okio的jar包是会报okhttp dispacther错误的,而且还要注意在回调的onResponse()方法中,只能调用一次:response.body().string(),具体原因请看:https://github.com/square/okhttp/issues/1240#issuecomment-233655904
post请求:
String json = "{\n" + "\"operation\" : \"register\" , \"mobile_phone\" : \"" + input_account + "\"" + "}"; OkHttpClient okHttpClient = new OkHttpClient(); //申明给服务端传递一个json串 //创建一个RequestBody(参数1:数据类型 参数2传递的json串) RequestBody requestBody = RequestBody.create(JSON, json); //创建一个请求对象 Request request = new Request.Builder() .url("http://45.78.12.140/art/login/login.php") .post(requestBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { //请求失败时调用 @Override public void onFailure(Call call, IOException e) { Log.e(TAG , "onFailure: " + e); } //请求成功时调用 @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String jsonData = response.body().string(); parseJSONWithGSON(jsonData ); } } }); }
//使用GSON解析json数据 private void parseJSONWithGSON(String jsonData) { //由于我从php服务器返回的数据书字符串,不是数组:[{"name":"hehe" , "age":"10"}],所以使用以下解析json数据的方法。 Gson gson = new Gson(); Test t = gson.fromJson(jsonData, Test.class); }
//如果使用以下方法,就会报错。返回的数据是数组则使用以下代码解析 Gson gson = new Gson(); usersList = gson.fromJson(jsonData, new TypeToken<List<Test>>() {}.getType());
报错:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
附上php服务器主要代码:
<?php require_once('mysql_connect.php'); //引入数据库连接文件,这个文件是自己写的,主要用来连接数据库。 $json = file_get_contents("php://input");//解析获取的二进制流 获取的数据格式是json的 $data = json_decode($json, true);//解析json数据,加第二个参数true 是数组 不然是对象 $sql = "select * from ecs_users where mobile_phone=?"; $stmt = $pdo->prepare($sql); //返回PDOStatement对象。 $res = $stmt->execute(array("15277907709")); if($res == false) //如果PDOStatement对象为false。 { echo $pdo->errorCode(); //获取错误的错误码,SQLSTATE的值 echo '<br />'; //获取错误信息数组,数组中包含3个单元 //0=>SQLSTAE,1=>CODE错误编号,2=>INFO 错误信息 $errInfo = $pdo->errorInfo(); // print_r($errInfo); } else { while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $user_name = $row["user_name"]; $password = $row["password_new"]; break; //获取一条数据后跳出循环。 } //注意在这里,$json是字符串变量,并不是数组。 $json = array( 'name' => $user_name , 'age' => $password ); //这样才是以数组的形式返回json数据到客户端。 $json_send = array(); $json_send[] = array( 'name' => $user_name , 'age' => $password ); echo json_encode($json , 128); } //echo "被影响的行数 = " . $stmt->rowCount(); ?>
参考:
okhttp学习参考:
http://www.cnblogs.com/awkflf11/p/5750008.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html
http://blog.csdn.net/song_shui_lin/article/details/52936942
php返回json数据参考:
http://blog.csdn.net/qq_14995933/article/details/51674037
相关文章推荐
- PHP后台2:客户端(IOS/Android)Post请求以及JSON数据编解码
- Android请求网络数据,json解析-FastJson遇到的问题 首字母大写问题
- php实现post请求 接收android客户端json数据 存储数据库 并返回json
- 关于Gson解析Okhttp返回的json数据遇到的问题
- PHP发送POST请求,以及返回json反斜杠处理
- php下POST json数据无法解析问题
- AFNetworking的网络请求(POST GET XML JSON以及其他类型的返回数据)和网络转态监听
- jquery 解析post请求返回得json数据
- 【android】利用volley+Gson POST json请求来接收jsonObject并解析json数据
- js解析php返回的json数据无法获取length的问题分析
- phpStudy4——前端页面使用Ajax请求并解析php返回的json数据
- okhttp框架的最简单的基本使用 post和get请求以及用gson解析请求的数据
- android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据
- PHP接收IOS post过来的json数据无法解析的问题
- Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题
- Android通过post请求发送一个xml,解析返回xml数据
- Android下网络请求数据,返回数据显示不全,解析json no value for xxx
- zTree3.5使用ajax请求返回json数据时遇到的问题
- IOS请求php返回的数据JSON数据无法正确解析 utf-8格式
- Jquery中post 请求后无数据返回的问题、jquery遍历json