Json错误:java.lang.String类型的值sl_summ无法转换为JSON OBJECT
如何解决此错误。希望你能指导我如何解决这个问题,我刚刚遇到了我的新手android编程。我只是遵循了一条户外运动中的代码并对其进行了一些修改。Json错误:java.lang.String类型的值sl_summ无法转换为JSON OBJECT
后我登录它将吐司JSON格式的消息错误:java.lang.String类型的值sl_summ不能在
的login.php
登录后转化成的JSONObject 吐司误差的 here is the screenshot$user_sldtl = $db->getUserSLsummary($arclass, $loanclass, $accintreceivable,
$date, $year, $month, $br_code, $clientid);
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);
}
JSON响应
该响应是由成员表。
{
"error":false,
"user":
{
"br_code":12,
"mem_id":13,
"username":"test",
"email":"[email protected]"
,"created_at":"2016-07-22 09:05:21"
}
}
这个响应是从sl_summ此用户具有在表
{
"error": false,
"sl_summ":
[
{
"sl_desc": "PA : Savings Account",
"tr_date": "2015-08-17",
"actual_balance": "483.67",
"available_balance": "483.67"
},
{
"sl_desc": "PA : Savings - Cash Bond",
"tr_date": "2015-08-28",
"actual_balance": "10129.43",
"available_balance": "10129.43"
}
]
}
SQLiteHandler.java
public class SQLiteHandler extends SQLiteOpenHelper {
private static final String TAG = SQLiteHandler.class.getSimpleName();
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "coredev_gsacwp";
// Login table name
private static final String TABLE_MEMBERS = "members";
private static final String TABLE_MEMBERS_SLDTL = "sldtl";
// Login Table Columns names
private static final String BR_CODE = "br_code";
private static final String MEM_ID = "mem_id";
private static final String MEM_USERNAME = "username";
private static final String MEM_EMAIL = "email";
private static final String MEM_CREATED_AT = "created_at";
// Members SL Details
private static final String SL_DESC = "sl_desc";
private static final String TR_DATE = "trans_date";
private static final String ACTUAL_BALANCE = "actual_balance";
private static final String AVAILABLE_BALANCE = "available_balance";
public SQLiteHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_MEMBERS + "("
+ BR_CODE + " INTEGER,"
+ MEM_ID + " INTEGER PRIMARY KEY,"
+ MEM_USERNAME + " TEXT,"
+ MEM_EMAIL + " TEXT UNIQUE,"
+ MEM_CREATED_AT + " TEXT" + ")";
db.execSQL(CREATE_LOGIN_TABLE);
//Members SLDTL table
String CREATE_SLDTL_TABLE = "CREATE TABLE " + TABLE_MEMBERS_SLDTL + "("
+ SL_DESC + " TEXT,"
+ TR_DATE + " DATETIME,"
+ ACTUAL_BALANCE + " REAL,"
+ AVAILABLE_BALANCE + " REAL" + ")";
db.execSQL(CREATE_SLDTL_TABLE);
Log.d(TAG, "Database table created");
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS_SLDTL);
// Create tables again
onCreate(db);
}
/**
* Storing user details in database
* */
public void addUser(String br_code, String mem_id, String username, String email, String created_at) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(BR_CODE, br_code); // branch code
values.put(MEM_ID, mem_id); // mem id
values.put(MEM_USERNAME, username); // username
values.put(MEM_EMAIL, email); // Email
values.put(MEM_CREATED_AT, created_at); // Created At
// Inserting Row
long id = db.insert(TABLE_MEMBERS, null, values);
db.close(); // Closing database connection
Log.d(TAG, "New user inserted into sqlite: " + id);
}
/**
* Storing user SL details in database
* */
public void addUserSLDTL(String sl_desc, String tr_date, String actual_balance, String avail_balance){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
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);
}
/**
* Getting user data from database
* */
public HashMap<String, String> getUserDetails() {
HashMap<String, String> user = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_MEMBERS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
user.put("br_code", cursor.getString(0));
user.put("mem_id", cursor.getString(1));
user.put("username", cursor.getString(2));
user.put("email", cursor.getString(3));
user.put("created_at", cursor.getString(4));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching user from Sqlite: " + user.toString());
return user;
}
/**
* Getting user SL details data from database
* */
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_desc", cursor.getString(0));
sl_summ.put("tr_date", cursor.getString(1));
sl_summ.put("actual_balance", cursor.getString(2));
sl_summ.put("avail_balance", cursor.getString(3));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching user from Sqlite: " + sl_summ.toString());
return sl_summ;
}
/**
* Re create database Delete all tables and create them again
* */
public void deleteUsers() {
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_MEMBERS, null, null);
db.close();
Log.d(TAG, "All user info are now deleted in sqlite");
}
/**
* Re create database Delete all tables and create them again
* */
public void deleteUserSLDTL() {
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_MEMBERS_SLDTL, null, null);
db.close();
Log.d(TAG, "All user's SLDTL info are now deleted in sqlite");
}
}
Login.java
行public class LoginActivity extends Activity {
private static final String TAG = RegisterActivity.class.getSimpleName();
private Button btnLogin;
private Button btnLinkToRegister;
private EditText inputUsername;
private EditText inputPassword;
private ProgressDialog pDialog;
private SessionManager session;
private SQLiteHandler db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
inputUsername = (EditText) findViewById(R.id.username);
inputPassword = (EditText) findViewById(R.id.password);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
// Progress dialog
pDialog = new ProgressDialog(this);
pDialog.setCancelable(false);
// SQLite database handler
db = new SQLiteHandler(getApplicationContext());
// Session manager
session = new SessionManager(getApplicationContext());
// Check if user is already logged in or not
if (session.isLoggedIn()) {
// User is already logged in. Take him to main activity
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
// Login button Click Event
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String username = inputUsername.getText().toString().trim();
String password = inputPassword.getText().toString().trim();
// Check for empty data in the form
if (!username.isEmpty() && !password.isEmpty()) {
// login user
checkLogin(username, password);
} else {
// Prompt user to enter credentials
Toast.makeText(getApplicationContext(),
"Please enter the credentials!", Toast.LENGTH_LONG)
.show();
}
}
});
// Link to Register Screen
btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Uri uri = Uri.parse("http://gsac.ph/iaccswebportal/register.php");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
/**
* function to verify login details in mysql db
* */
private void checkLogin(final String username, final String password) {
// Tag used to cancel the request
String tag_string_req = "req_login";
pDialog.setMessage("Logging in ...");
showDialog();
StringRequest strReq = new StringRequest(Method.POST,
AppConfig.URL_LOGIN, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Login Response: " + response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
// Check for error node in json
if (!error) {
// user successfully logged in
// Create login session
session.setLogin(true);
// Now store the user in SQLite
//String uid = jObj.getString("uid");
JSONObject user = jObj.getJSONObject("user");
String br_code = user.getString("br_code");
String mem_id = user.getString("mem_id");
String username = user.getString("username");
String email = user.getString("email");
String created_at = user.getString("created_at");
// Inserting row in users table
db.addUser(br_code, mem_id, username, email, created_at);
try {
JSONObject sl_jObj = new JSONObject("sl_summ");
Boolean sl_error = sl_jObj.getBoolean("error");
Log.e("Test", "Error : " + sl_error);
if (!sl_error) {
JSONArray sl_summ = sl_jObj.optJSONArray("sl_summ");
for (int i = 0; i < sl_summ.length(); i++) {
JSONObject rootObj = sl_summ.getJSONObject(i);
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_desc, tr_date, actual_balance, avail_balance);
}
}
}catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
// Launch main activity
Intent intent = new Intent(LoginActivity.this,
MainActivity.class);
startActivity(intent);
finish();
} else {
// Error in login. Get the error message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
private void showDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hideDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
}
消息日志
Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"[email protected]","created_at":"2016-07-22 09:05:21"}}<br /><br />{"error":false,"sl_summ":{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}
06-22 16:07:30.456 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][LoginActivity]: dispatchDetachedFromWindow
06-22 16:07:30.470 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=85
06-22 16:07:30.478 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/SessionManager: User login session modified!
06-22 16:07:30.498 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: New user inserted into sqlite: 13
06-22 16:07:30.499 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: org.json.JSONException: Value sl_summ of type java.lang.String cannot be converted to JSONObject
06-22 16:07:30.500 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at org.json.JSON.typeMismatch(JSON.java:111)
06-22 16:07:30.500 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at org.json.JSONObject.<init>(JSONObject.java:160)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at org.json.JSONObject.<init>(JSONObject.java:173)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at ph.coredev.johnjessbayutas.gsacmobileportal.activity.LoginActivity$3.onResponse(LoginActivity.java:147)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at ph.coredev.johnjessbayutas.gsacmobileportal.activity.LoginActivity$3.onResponse(LoginActivity.java:116)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
06-22 16:07:30.501 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at android.os.Looper.loop(Looper.java:154)
06-22 16:07:30.502 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6692)
06-22 16:07:30.502 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at java.lang.reflect.Method.invoke(Native Method)
06-22 16:07:30.502 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
06-22 16:07:30.502 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
06-22 16:07:30.560 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][LoginActivity]: MSG_WINDOW_FOCUS_CHANGED 1
06-22 16:07:30.564 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal E/ViewRootImpl: sendUserActionEvent() mView == null
06-22 16:07:30.579 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=81
06-22 16:07:30.579 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][Toast]: setView = android.widget.LinearLayout{60290ee V.E...... ......I. 0,0-0,0} touchMode=true
06-22 16:07:30.604 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][LoginActivity]: MSG_WINDOW_FOCUS_CHANGED 0
06-22 16:07:30.623 24346-24418/ph.coredev.johnjessbayutas.gsacmobileportal D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [907x245]-format:1
06-22 16:07:30.692 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Fetching user from Sqlite: {[email protected], created_at=2016-07-22 09:05:21, br_code=12, mem_id=13, username=novalyn}
06-22 16:07:30.696 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Fetching user from Sqlite: {}
06-22 16:07:30.708 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=85
06-22 16:07:30.708 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][MainActivity]: setView = [email protected][MainActivity] touchMode=true
06-22 16:07:30.709 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][Toast]: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
06-22 16:07:30.746 24346-24418/ph.coredev.johnjessbayutas.gsacmobileportal D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1080x1920]-format:1
06-22 16:07:30.811 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][MainActivity]: MSG_RESIZED_REPORT: ci=Rect(0, 72 - 0, 0) vi=Rect(0, 72 - 0, 0) or=1
06-22 16:07:30.811 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/View[email protected][MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
06-22 16:07:30.813 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal V/InputMethodManager: Starting input: [email protected] nm : ph.coredev.johnjessbayutas.gsacmobileportal ic=null
06-22 16:07:30.814 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
06-22 16:07:30.825 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=98
06-22 16:07:30.825 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=79
06-22 16:07:30.839 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
06-22 16:07:31.258 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][LoginActivity]: dispatchDetachedFromWindow
06-22 16:07:31.272 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=84
06-22 16:07:34.027 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][Toast]: dispatchDetachedFromWindow
06-22 16:07:34.037 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=81
06-22 16:08:04.047 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal V/InputMethodManager: Starting input: [email protected] nm : ph.coredev.johnjessbayutas.gsacmobileportal ic=null
06-22 16:08:04.048 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
06-22 16:08:04.055 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=80
06-22 16:08:04.056 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=98
06-22 16:08:09.686 24346-24346/ph.coredev.johnjessbayutas.gsacmobileportal D/[email protected][MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
从我在您的邮件日志中看到的,是你要将此转换:
Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"[email protected]","created_at":"2016-07-22 09:05:21"}}<br /><br />{"error":false,"sl_summ":{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}
成一个JSONObject 。
而且我看到在这个至少2个错误:
- 有一些HTML元素:
<br /><br />
,你需要先删除。 - 有多个JSON文件
所以,去除HTML元素后,你将需要:
- 解析登录响应,并进行多次JSON对象;
- 或者从登录响应中创建一个JSON数组。
您可以使用此website来验证您的JSON。
先生的HTML元素已被删除。你能告诉我如何解析这个登录响应并创建多个JSON对象或者在我的登录响应中创建一个JSON数组吗? – John
这是因为您的<br />
标签的回应。
您具有如
Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"[email protected]","created_at":"2016-07-22 09:05:21"}}<br /><br />{"error":false,"sl_summ":{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}
这些<br>
标签是因为你的PHP代码的响应。
另外你的sl_summ
不是jsonArray。它是一个Json对象。
{
"error":false,
"sl_summ":
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
}
}
{
"error":false,
"sl_summ":
{
"sl_desc":"PA : Savings - Cash Bond",
"tr_date":"2015-08-28",
"actual_balance":"10129.43",
"available_balance":"10129.43"
}
}
所以,当你写JSONArray sl_summ = sl_jObj.optJSONArray("sl_summ");
此JSONObject的不会转换为JsonArray这反过来给你的错误。
你应该纠正你的JSON作为,
{
"error":false,
"sl_summ":
[{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
},
{
"sl_desc":"PA : Savings - Cash Bond",
"tr_date":"2015-08-28",
"actual_balance":"10129.43",
"available_balance":"10129.43"
}]
}
更改jsonobect为sl_summ这样
JsonObject json = new JsonObject(response);
if(json.has("sl_summ"){
JSONObject sl_jObj = new JSONObject(json.getString("sl_summ"));
}
先生在我更改为代码后错误被更改为无值sl_summ ** 06-22 17:14:56.776 25354-25354/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler:新用户插入sqlite:13 06-22 17:14:56.777 25354-25354/ph.coredev.johnjessbayutas.gsacmobileportal W/System.err:org.json.JSONException:没有值为sl_summ ** – John
Toast消息在我更新了代码后就消失了..但是问题在于登录后,我检查了Log cat没有值是取回。 **从Sqlite sl_summ表中获取用户:{} ** – John
以下是登录响应**登录响应:{“error”:false,“user”:{“br_code”:12,“mem_id”,13,“username “:”novalyn“,”email“:”[email protected]“,”created_at“:”2016-07-22 09:05:21“}} {”error“:false,”sl_summ“:{”sl_desc “:”PA:储蓄账户“,”tr_date“:”2015-08-17“,”actual_balance“:”483.67“,”available_balance“:”483.67“}} {”error“:false,”sl_summ“:{ “sl_desc”:“PA:储蓄 - 现金债券”,“tr_date”:“2015-08-28”,“actual_balance”:“10129.43”,“available_balance”:“10129.43”}} **顺便谢谢帮助我.. – John
请粘贴jSONResponse正因为如此,它不容易辨认出您的jsonresponse什么。 – Ashwani
对不起,先生,但我不知道如何有一个可读的JSON响应。我只复制并粘贴到浏览器中。你能告诉我先生如何有一个更可读的JSON响应?就像在一些教程中一样..我只会编辑我的JSON响应先生。 – John