Php 如何修复Json中X的无值
Json错误:sl_summ没有值 php代码Php 如何修复Json中X的无值,php,android,json,api,Php,Android,Json,Api,Json错误:sl_summ没有值 php代码 If($user_sldtl != null) { for($i = 0; $i < count($user_sldtl); $i++){ $sl_response["error"] = FALSE; $sl_response["sl_summ"]["sl_brcode"] = $user_sldtl[$i][0]; $sl_respo
If($user_sldtl != null) {
for($i = 0; $i < count($user_sldtl); $i++){
$sl_response["error"] = FALSE;
$sl_response["sl_summ"]["sl_brcode"] = $user_sldtl[$i][0];
$sl_response["sl_summ"]["sl_memid"] = $user_sldtl[$i][3];
$sl_response["sl_summ"]["sl_desc"] = $user_sldtl[$i][7];
$sl_response["sl_summ"]["tr_date"] = $user_sldtl[$i][10];
$sl_response["sl_summ"]["actual_balance"] = $user_sldtl[$i][14];
$sl_response["sl_summ"]["available_balance"] = $user_sldtl[$i][14];
json_encode($sl_response, true);
echo json_encode($sl_response, true);
//echo "<br>";
}
}
else {
// echo "Member's data not found"."<br />";
// echo "Var dump: ";
// var_dump($user);
// echo " ->No record found";
$sl_response["error"] = TRUE;
$sl_response["error_msg"] = "NO SL Details found!";
echo json_encode($sl_response);
}
SQLiteHandler.java
public void addUserSLDTL(String sl_brcode, String sl_memid, String sl_desc, String tr_date, String actual_balance, String avail_balance){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(SL_BRCODE, sl_brcode); // sl branch code
values.put(SL_MEMID, sl_memid); // sl mem id
values.put(SL_DESC, sl_desc); // sl desc
values.put(TR_DATE, tr_date); // trans date
values.put(ACTUAL_BALANCE, actual_balance); // actual balance
values.put(AVAILABLE_BALANCE, avail_balance); // availabe balance
// Inserting Row
long id = db.insert(TABLE_MEMBERS_SLDTL, null, values);
db.close(); // Closing database connection
Log.d(TAG, "User SL Details inserted into sqlite: " + id);
}
public HashMap<String, String> getUserSLDTL() {
HashMap<String, String> sl_summ = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_MEMBERS_SLDTL;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
sl_summ.put("sl_brcode", cursor.getString(0));
sl_summ.put("sl_memid", cursor.getString(1));
sl_summ.put("sl_desc", cursor.getString(2));
sl_summ.put("tr_date", cursor.getString(3));
sl_summ.put("actual_balance", cursor.getString(4));
sl_summ.put("avail_balance", cursor.getString(5));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching user from Sqlite: " + sl_summ.toString());
return sl_summ;
}
public void addUserSLDTL(字符串sl_brcode、字符串sl_memid、字符串sl_desc、字符串tru日期、字符串实际余额、字符串可用余额){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(SL_BRCODE,SL_BRCODE);//SL分支代码
value.put(SL_MEMID,SL_MEMID);//SL mem id
value.put(SL_DESC,SL_DESC);//SL DESC
value.put(TR_DATE,TR_DATE);//trans DATE
value.put(实际余额,实际余额);//实际余额
value.put(可用余额,可用余额);//可用余额
//插入行
long id=db.insert(TABLE_MEMBERS_SLDTL,null,value);
db.close();//关闭数据库连接
Log.d(标签,“插入sqlite的用户SL详细信息:”+id);
}
公共HashMap getUserSLDTL(){
HashMap sl_summ=新HashMap();
String selectQuery=“SELECT*FROM”+表\u成员\u SLDTL;
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//移到第一排
cursor.moveToFirst();
if(cursor.getCount()>0){
sl_sum.put(“sl_brcode”,cursor.getString(0));
sl_sum.put(“sl_memid”,cursor.getString(1));
sl_sum.put(“sl_desc”,cursor.getString(2));
sl_summa.put(“tr_date”,cursor.getString(3));
sl_summa.put(“实际余额”,cursor.getString(4));
sl_summa.put(“avail_balance”,cursor.getString(5));
}
cursor.close();
db.close();
//返回用户
Log.d(标记,“从Sqlite获取用户:”+sl_sum.toString());
返回sl_总和;
}
正如您所说,您已经解析了用户数据
对于sl_summ,请使用以下内容:
我已将您的响应记录在一个字符串中,您可以直接从您的响应中执行此操作:
private static String sl_summResponse = "{\n" +
" \"error\": false,\n" +
" \"sl_summ\": {\n" +
" \"sl_brcode\": \"12\",\n" +
" \"sl_memid\": \"13\",\n" +
" \"sl_desc\": \"PA : Savings Account\",\n" +
" \"tr_date\": \"2015-08-17\",\n" +
" \"actual_balance\": \"483.67\",\n" +
" \"available_balance\": \"483.67\"\n" +
" }\n" +
"},\n" +
"{\n" +
" \"error\": false,\n" +
" \"sl_summ\": {\n" +
" \"sl_brcode\": \"12\",\n" +
" \"sl_memid\": \"13\",\n" +
" \"sl_desc\": \"PA : Savings - Cash Bond\",\n" +
" \"tr_date\": \"2015-08-28\",\n" +
" \"actual_balance\": \"10129.43\",\n" +
" \"available_balance\": \"10129.43\"\n" +
" }\n" +
"}";
然后像这样解析您的响应:
try {
JSONObject jObj = new JSONObject(sl_summResponse);
Boolean error = jObj.getBoolean("error");
Log.e("Test","Error : "+error);
if (!error){
JSONArray sl_summ = jObj.optJSONArray("sl_summ");
for (int i =0;i<sl_summ.length();i++){
JSONObject rootObj = sl_summ.getJSONObject(i);
String sl_brcode = rootObj.getString("sl_brcode");
String sl_memid = rootObj.getString("sl_memid");
String sl_desc = rootObj.getString("sl_desc");
String tr_date = rootObj.getString("tr_date");
String actual_balance = rootObj.getString("actual_balance");
String avail_balance = rootObj.getString("avail_balance");
// then do whatever you want with this data
// Inserting row in users table
db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance);
}
}
试试看{
JSONObject jObj=新的JSONObject(sl_summaresponse);
布尔错误=jObj.getBoolean(“错误”);
Log.e(“测试”,“错误:+错误”);
如果(!错误){
JSONArray sl_summ=jObj.optJSONArray(“sl_summ”);
对于(int i=0;isorry不理解您的问题,请您详细说明一下??当我登录时,它将重新运行一个Json错误:sl_summ没有值。即使它在sl_summ中有值。您可以共享代码吗登录期间如何获得Json?您可以打印您获得的完整响应并共享它,因为您共享的响应是不完整??在我成功登录之前,但当我将代码从JSONObject sl_sum=jObj.getJSONObject(“sl_sum”)添加到db.addUserSLDTL(sl_brcode,sl_memid,sl_desc,tr_date,实际余额,可用余额);很快。出现了错误。但是,先生,我不知道私有静态字符串sl_summResponse的确切值。因为数据是动态的,它将取决于表“sl”中的数据是什么"有些用户在SL表中有1个数据,有些用户有2个或更多…我如何使其成为动态的,先生?Np,无论值是多少,我已经获取了数组,无论它有一个值还是20都不会有任何区别。它已经是动态的,先生,你能给我解释一下私有静态字符串SL_summResponse是如何工作的吗?在你的SL_summResponse中,你会得到一个我拥有的数组如果你想了解更多google如何解析JSON数组的话,你可以使用类似于你解析用户对象的方法来解析这个数组。
try {
JSONObject jObj = new JSONObject(sl_summResponse);
Boolean error = jObj.getBoolean("error");
Log.e("Test","Error : "+error);
if (!error){
JSONArray sl_summ = jObj.optJSONArray("sl_summ");
for (int i =0;i<sl_summ.length();i++){
JSONObject rootObj = sl_summ.getJSONObject(i);
String sl_brcode = rootObj.getString("sl_brcode");
String sl_memid = rootObj.getString("sl_memid");
String sl_desc = rootObj.getString("sl_desc");
String tr_date = rootObj.getString("tr_date");
String actual_balance = rootObj.getString("actual_balance");
String avail_balance = rootObj.getString("avail_balance");
// then do whatever you want with this data
// Inserting row in users table
db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance);
}
}