ここに同じトピックとエラーで投稿された質問がいくつかあることは知っていますが、どれも私のものと同じ問題を示していないので、誰かが原因を指摘するのを手伝ってくれることを期待して、ここに質問を投稿することにしました。だから私は自分のアプリにログイン機能を実装しようとしています、そしてここにコードがあります:
if (tag.equalsIgnoreCase(login_tag)){
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
// user successfully logged in
// Store user details in SQLite Database
DatabaseHandler db = new DatabaseHandler(mContext);
JSONObject json_user = json.getJSONObject("user");
// Clear all previous data in database
logoutUser(mContext);
Toast.makeText(mContext, json.toString(3), Toast.LENGTH_LONG).show();
db.addUser(json_user.getString(KEY_EMAIL), json_user.getString(KEY_NAME), json.getString(KEY_UID), json.getString(KEY_AVA), json_user.getString(KEY_BDAY), json_user.getString(KEY_COUNTRY), json_user.getString(KEY_PREF), json_user.getString(KEY_SPEND));
// Launch Dashboard Screen
Intent dashboard = new Intent(mContext, DashboardActivity.class);
// Close all views before launching Dashboard
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivity(dashboard);
// Close Login Screen
((Activity) mContext).finish();
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
そして、これは私がログインしたときに得たJSON応答です:
{
"tag": "login",
"success": 1,
"error": 0,
"uid": "5123",
"user": {
"email": "[email protected]",
"name": "abc",
"avatar": "avatars/img_hzsxda_2013-03-18-11-03-33.jpg",
"bday": "1991-02-01",
"country": "Australia",
"preferences": "none",
"spending": "none"
}
}
したがって、明らかにavatar
の値がありますが、logcatに次の警告が表示されます。
03-18 12:06:36.972: W/System.err(24574): org.json.JSONException: No value for avatar
値のアバターが取得されないため、addUser
を完了できず、ログインに失敗します。エラーとその解決方法を見つけるのを手伝ってください。ありがとうございました。
ここでavatar
値を取得するために間違ったオブジェクトを使用していますjson.getString(KEY_AVA)
。 json_user.getString(KEY_AVA)
である必要があります。
また、例外をスローする代わりに、値が存在しない場合にoptString
を返すgetString
の代わりにnull
を使用することもできます。