2016-06-26 13 views
0

私は通信用にRetrofit APIを使用しています。私はJSONオブジェクトをRetrofit Result Beanに直接格納します。私は以下のプロセスを試して、それはヌル値で生産されました。しかし、postmanを使用している間は、結果は適切です。AndroidでJsonオブジェクトとして更新結果を取得

以下は、上記のデータフィールドは、このデータは、以下のタイプ

に依存する他の場合日にある場合の値で入力に従って変化し続けるAPI

{ 
    "status": 101, 
    "message": "Ok", 
    "type": 1, 
    "data": { 
    "value": "adakdj4lkj43" 
    } 
} 

の出力でありますデータが存在しないことを意味し、私のResponseBean

public class ResponseBean { 
    private int status = 0; 
    private String message = ""; 
    private int type = 0; 
    private JSONObject data = new JSONObject(); 
} 

{として、私はこのデータを取得しています改造コールを実行}。これを解決するために私を助けてください。前もって感謝します。 JSONはあなたが最後に何をしたいですので

+0

どのレトロフィットバージョンをお使いですか? Retrofit設定を貼り付けることができますか? –

+0

コンパイル 'com.squareup.retrofit2:retrofit:2.1.0'これは私が使用している改造です –

+0

このPOSTかGETですか? URLよりも敏感なURLを提供することができますか?投稿する前に名前を変更してください。URLパターンが必要です。 –

答えて

0

あなたがしようとしているコンセプトは完璧です。しかし、ここで間違っていたのは、Retrofit BeanでJSONObjectを使用することだけです。 Retrofitは、JSONObjectをBeanオブジェクトに変換するライブラリです。 JSONObjectの代わりにObjectを試してみてください。私はRetrofitがJSONObjectの一部をObjectに変換する作業をしていると思います。したがって、これをDataTypeとして使用する代わりに、

  public class ResponseBean { 
          private int status = 0; 
          private String message = ""; 
          private int type = 0; 
          private Object data = new Object(); 
      } 

の代わりに使用してください。

private JSONObject data = new JSONObject(); 
+0

これはほんの少しのものです。ありがとうございました。 –

0
public class ResponseBean { 
    private int status; 
    private String message; 
    private int type; 
    private String data; 

    public int getStatus() { 
     return status; 
    } 

    public void setStatus(int status) { 
     this.status = status; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public int getType() { 
     return type; 
    } 

    public void setType(int type) { 
     this.type = type; 
    } 

    public String getData() { 
     return data; 
    } 

    public void setData(String data) { 
     this.data = data; 
    } 

    public ResponseBean(JSONObject object){ 
     try { 
      setStatus(object.getInt("status")); 
     } catch (JSONException e) { 
      setStatus(0); 
     } 

     try { 
      setMessage(object.getString("status")); 
     } catch (JSONException e) { 
      setMessage(""); 
     } 

     try { 
      setType(object.getInt("type")); 
     } catch (JSONException e) { 
      setType(0); 
     } 

     try { 
      setData(object.getString("data")); 
     } catch (JSONException e) { 
      setData(""); 
     } 
    } 

    @Override 
    public String toString() { 
     JSONObject object = new JSONObject(); 
     try { 
      object.put("status", getStatus()); 
      object.put("message", getMessage()); 
      object.put("type", getType()); 
      object.put("data", getData()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return object.toString(); 
    } 
} 

追加するには、データ

try { 
     JSONObject object = new JSONObject("yourData"); 
     ResponseBean responseBean = new ResponseBean(object); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
} 

はデータ

responseBean.getMessage(); 
+0

私はデータの値を他のフィールドのためのjsonobjectは、改造がそれを完璧にやっている。 –

+0

responseBean.toString(); –

+0

そのdosentはjsonobjectとして完全なデータを取得したいと思っています。 Say {"value": "adakdj4lkj43"}私はそのjsonオブジェクトにしたいので、タイプをlokingしてgsonを使ってオブジェクトに変換することができます。 –

0

を取得するには、あなたはこれを試すことができます。

public class ResponseBean { 
    private int status = 0; 
    private String message = ""; 
    private int type = 0; 
    private ValueObject data; 
} 

public class ValueObject { 
    private String value; 
} 

後getterとsetterを追加すると、あなたはできる:

ResponseBeam rBeam = //Retrofit response here. 
JsonObject requiredJsonObject = new JsonObject(); 
requiredJsonObject.put("value", rBeam.getData().getValue()); 

Log.d(TAG, requiredJsonObject); 

必要に応じてログを確認してください。

+0

Bro私がjsonオブジェクトとしてこれを取ろうとしている主な理由は、データが1つの大文字と小文字の値が異なる場合、別のメッセージの別のメッセージが異なる場合です。 。しかし、私が試みている方法は、4つのクラスで同じことを完了します。私は3つしか言及していませんが、私は25の同様のAPIを持っています。私はすべてハンドリングする必要があります。 –

+0

私は値の変化を観察しなかったので、このようにしました。 –

0

私は改造版2を使用しています。以下のクラス

public class ResponseBean { 

    private int status; 
    private String message; 
    private int type; 
    private Data data; 

    public int getStatus() { 
     return status; 
    } 


    public void setStatus(int status) { 
     this.status = status; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public int getType() { 
     return type; 
    } 

    public void setType(int type) { 
     this.type = type; 
    } 

    public Data getData() { 
     return data; 
    } 

    public void setData(Data data) { 
     this.data = data; 
    } 

} 

を追加し、私はthis

を使用してモデルを生成したinterface

このよう
public interface Api { 

    @FormUrlEncoded 
    @POST("Login") 
    Call<ResponseBean> loginUser(@Field("uuid") String email, @Field("PASS") String password); 
} 

を作成

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' 
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' 

あなたのGradleファイルに次の依存関係を追加し、データクラス

01あなたの Activity

ResponseBean responseBean; 
Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://localhost:8080/API/") 
    .build(); 

Api api = retrofit.create(Api.class); 

Call<ResponseBean> call = api.loginUser("your_user_id","your_password"); 
    call.enqueue(new Callback<ResponseBean>() { 
     @Override 
     public void onResponse(Call<ResponseBean> call, Response<ResponseBean> response) { 
      responseBean = response.body(); 
     } 

     @Override 
     public void onFailure(Call<ResponseBean> call, Throwable t) { 

     } 
    }); 

で今

public class Data { 

    private String value; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

} 

今、あなたはresponsebeanに直接jsonobject保管されています。これがうまくいきたいです

関連する問題