如何从对象列表中提取元素并存储在String数组中

时间:2018-12-01 07:33:11

标签: java android list arraylist retrofit

我正在尝试从服务器获取响应并将其显示在微调器中。我的服务器返回包含JSON数组的响应。 JSON数组有两个字段 question q_id 我想将这两个数据都存储在不同的字符串数组中,并希望使用 question 中的详细信息填充Spinner >,并使用从微调器中选择的问题的索引,我想从 q_id 数组中获取元素并将其发送到服务器

谢谢。

服务器响应

library(raster)

#sample rasters
r <- raster(extent(-180,179.9999, -55.91668 , 83.58326))
res(r)<-c(0.5/6, 0.5/6)
r <- setValues(r, runif(ncell(r)))
cellStats(r, sum) #3615229

temp_extent <- raster(extent(-180,180, -90 , 90))
res(temp_extent)<-c(0.5, 0.5)

# to get resolution (0.5, 0.5)
r1 <- aggregate(r, fact=6, fun=sum)
cellStats(r1, sum) #3615229
r1
# to get extent (-180,180,-90,90)
r2 <- resample(x= r1, y=temp_extent, method="bilinear") # what I am hoping is for NA to fill the added pixels
cellStats(r2, sum) #problem: gives different total value: 3615916
r2

此响应的模型

 {
    "data": [ 
        {
            "q_id": "21",
            "question": "Flipkart VS Amazone which is better?"
        },
        {
            "q_id": "22",
            "question": "Test"
        },

    ],
    "status": true,
    "message": "Bank Ac created sucessfully"}

基准类别

 public class Question {

    @SerializedName("data")
    @Expose
    private List<Datum> data = null;
    @SerializedName("status")
    @Expose
    private Boolean status;
    @SerializedName("message")
    @Expose
    private String message;

    public List<Datum> getData() {
        return data;
    }

    public void setData(List<Datum> data) {
        this.data = data;
    }

    public Boolean getStatus() {
        return status;
    }

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

    public String getMessage() {
        return message;
    }

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

}

呼叫服务器

    public class Datum {

    @SerializedName("q_id")
    @Expose
    private String qId;
    @SerializedName("question")
    @Expose
    private String question;

    public String getQId() {
        return qId;
    }

    public void setQId(String qId) {
        this.qId = qId;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

}

接口

private void getQuestions() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).addInterceptor(interceptor).build();
    if (retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(CommonObjects.BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    getquestion Service = retrofit.create(getquestion.class);

    Call<Question> call = Service.post(id);

    call.enqueue(new Callback<Question>() {
        @Override
        public void onResponse(Call<Question> call, Response<Question> response) {
            if (!response.body().getStatus()) {
                message = response.body().getMessage();
                showMessage(message);
            } else {
                Question jsonResponse = response.body();
                message = response.body().getMessage();
                CommonObjects.q.setData(jsonResponse.getData());
                CommonObjects.q.setMessage(message);
                CommonObjects.q.setStatus(response.body().getStatus());
            }
        }


        @Override
        public void onFailure(Call<Question> call, Throwable t) {
            // handle execution failures like no internet connectivity
            BusProvider.getInstance().post(new ErrorEvent(-2, t.getMessage()));
        }
    });

}

4 个答案:

答案 0 :(得分:0)

您需要JSONObjectJSONArray类。

从服务器解析JSON响应的步骤。

  1. 实例化return { rows: mapped }; 类,并将包含JSONObject响应的变量传递到JSON类的构造函数中。

    JSONObject
  2. 现在,您可以使用JSONObject jsonObj = new JSONObject(jsonResponse); 类中可用的方法在JSON响应中获取任何内容。

例如,如果您需要JSONObject数组来提取它,则可以使用data方法并传入该数组的键(在您的情况下为getJSONArray

data

现在要提取JSONArray arr = jsonObj.getJSONArray("data"); 数组中的数据,请使用data类中可用的适当方法。

类似地,您可以使用JSONArrayJSONObject类提取其他数据。

请记住,如果您有JSONArray对象,请使用JSON类中可用的方法,如果您有JSONObject数组,请使用JSON类中可用的方法提取所需的数据。

答案 1 :(得分:0)

您可以像这样使用org.json库提取该JSON:

JSONArray

答案 2 :(得分:0)

使用这种类型的代码来解析Json数组。有关更多示例

JSONObject jsonObj = new JSONObject(jsonResponse);
JSONArray data = jsonObj.getJSONArray("data");

Question question = new Question();
List<Datum> datumList = new ArrayList<Datum>();

          if (data != null) {
          for (int i = 0; i < data.length(); i++) {
              try {
                    JSONObject obj = (JSONObject) data.get(i);
                    Datum datum = new Datum();
                    datum.setQId(data.getString("q_id"));
                    datum.setQuestion(data.getString("question"));
                    datumList.add(datum);                        

                 } catch (Exception e) {
                     e.printStackTrace();
                 }
              }
            }
      question.setData(datumList);

有关更多详细信息,请learn

答案 3 :(得分:0)

用于每个循环,并将数据填充到arraylist中。做这样的事情。

else {
    ArrayList<String> QidList = new ArrayList<String>();
    ArrayList<String> QuestionList = new ArrayList<String>();
    Question jsonResponse = response.body();
    message = response.body().getMessage();
    CommonObjects.q.setData(jsonResponse.getData());
    CommonObjects.q.setMessage(message);
    CommonObjects.q.setStatus(response.body().getStatus());
    for (Datum data : jsonResponse.getData()) {
        if((!TextUtils.isEmpty(data.getQId())) && 
                      (!TextUtils.isEmpty(data.getQuestion()))){
             QidList.add(data.getQId());
             QuestionList.add(data.getQuestion());
        }

    }
}