0

私の Android プロジェクトでは、ユーザーがログインすると、サーバーにアクセスしてクライアントに json データを返します。ユーザーが間違ったユーザー名またはパスワードを入力すると、サーバーは次のように json データを返します。

{"d":{"__type":"FMService.LoginUser:#StarHope.FMS.Web.Pages.Service","Error":"worng","Permissions":null,"UserInfo":null}}

ただし、ユーザーが正しいユーザー名とパスワードを入力すると、返されるデータ「エラー」は null です。したがって、キー「エラー」の値は null です。私はそれに対処するためにこれを試みます。

        try
        {
          //when Error is not null
          String error = (String) map.get("Error"); 
        } 
        catch (Exception e)
        {
          //when Error is null
        }

これでよろしいですか?これで何か問題がありますか?ありがとうございます。

4

2 に答える 2

1

Map に値を追加する前に、json 文字列を解析してコンテンツが NULL かisNullどうかを確認します。jsonobject

JSONObject jobject=new JSONObject("YOUR_JSON_STRING");


if(!jobject.isNull("d")){
  JSONObject jobjd=jobject.getJSONObject("d");
 String strtype,strError;
  if(jobjd.isNull("__type")){
     strtype=jobjd.getString("__type");
    }
   else{
      //do some code here
        strtype="is null";
    }
  if(jobjd.isNull("Error")){
     strError=jobjd.getString("Error");
    }
   else{
      //do some code here
        strError="is null";
    }
    //.....same code here for Permissions and UserInfo
}

else{
   //do some code here
}
于 2012-12-11T01:58:40.727 に答える
1

使用できますgetString()JSONExceptionマッピングが欠落している場合、このメソッドは a を発生させます。

public String getString (文字列名)

API レベル 1 で追加されました。存在する場合は名前でマップされた値を返し、必要に応じて強制します。

そのようなマッピングが存在しない場合、JSONException をスローします。

を使用して、マッピングが存在するか null であるかをテストすることもできますisNull()

Errorフィールドはdルートではなく、オブジェクト内にあることに注意してください。

于 2012-12-11T01:52:24.250 に答える