JSON解析GET方法,试图在Spinner中显示值

问题描述 投票:-1回答:4

我试图通过使用JSON解析在Spinner中显示值,但它没有采用centerID并给出错误“找不到centerID”。并且,Spinner View中没有显示任何内容。

//这是我的API文件

BASE_URL : http://192.168.1.80/aoplnew/api/
API URL : BASE_URL/users/getdoctorslist/$center_id
METHOD : GET
PARAMETER TO PASS:
                center_id=4
INPUT:
        BASE_URL/users/getdoctorslist/4
OUTPUT:
          {
    "status": true,
    "result": [
        {
            "doctor_id": "1",
            "first_name": "Dr. Sagar",
            "last_name": "Patil"
        },
        {
            "doctor_id": "2",
            "first_name": "Dr. Ashwini",
            "last_name": "D"
        }
    ],
    "message": "Get Doctors list successfully!"
}

Errors:
1)
       {
           "status": false,
        "message": "Center id should not empty!"
        }
2)
       {
           "status": false,
        "message": "There is no Center data found!"
}

这是我在做Connection的配置文件

public class Config {

  //JSON URL
  public static final String DATA_URL = "http://192.168.1.80/aoplnew/api/users/getdoctorslist/{center_id}";

  //Tags used in the JSON String
  public static final String TAG_DOC_ID = "doctor_id";
  public static final String TAG_FIRST_NAME = "first_name";
  public static final String TAG_LAST_NAME = "last_name";

  //JSON array name
  public static final String JSON_ARRAY = "result";
}

这是我的片段,我试图使用Volley库在Spinner中获取值

private ArrayList<String> docList;

//JSON Array
private JSONArray result;
private Spinner doctorLists;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_add_patient, container, false);

    doctorLists = (Spinner) view.findViewById(R.id.doctors_list);
    //Initializing the ArrayList
    docList = new ArrayList<String>();
    //This method will fetch the data from the URL
    getData();
    return view;  
} // closing onCreateView()

private void getData(){
  //Creating a string request
  StringRequest stringRequest = new StringRequest(Request.Method.GET,Config.DATA_URL,
new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
      JSONObject j = null;
      try {
        //Parsing the fetched Json String to JSON Object
        j = new JSONObject(response);

        //Storing the Array of JSON String to our JSON Array
        result = j.getJSONArray(Config.JSON_ARRAY);

        //Calling method getStudents to get the students from the JSON Array
        getDoctors(result);
      } catch (JSONException e) {
        e.printStackTrace();
      }
    }
  },
  new Response.ErrorListener() {
  @Override
    public void onErrorResponse(VolleyError error) {

    }
  });

  //Creating a request queue
  RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
  //Adding request to the queue
  requestQueue.add(stringRequest);
}

private void getDoctors(JSONArray j){
  //Traversing through all the items in the json array
  for(int i=0;i<j.length();i++){
    try {
      //Getting json object
      JSONObject json = j.getJSONObject(i);

      //Adding the name of the student to array list
      docList.add(json.getString(Config.TAG_FIRST_NAME));
    } catch (JSONException e) {
      e.printStackTrace();
    }
  }

  //Setting adapter to show the items in the spinner
  doctorLists.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, docList));
}
android json android-volley spinner
4个回答
1
投票

你缺少请求方法

用这个 你的Api需要在调用时将center_id作为参数传递

StringRequest stringRequest = new StringRequest(Request.Method.GET,Config.DATA_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject j = null;
try {
//Parsing the fetched Json String to JSON Object
j = new JSONObject(response);

//Storing the Array of JSON String to our JSON Array
result = j.getJSONArray(Config.JSON_ARRAY);

//Calling method getStudents to get the students from the JSON Array
getDoctors(result);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
}){ @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");
            params.put("center_id", "4");
            return params;
        };

//Creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
//Adding request to the queue
requestQueue.add(stringRequest);
}

如果仍然没有工作让我知道


0
投票
StringRequest stringRequest = new StringRequest(Config.DATA_URL,...

您没有在请求中设置center_id参数


0
投票

我英语说的不好。

我建议使用GSON将json字符串转换为对象:https://github.com/google/gson

并建议使用改造连接服务:https://square.github.io/retrofit/


0
投票

您已经掌握了有关API的信息。

API URL : BASE_URL/users/getdoctorslist/$center_id
METHOD : GET
PARAMETER TO PASS:
                center_id=4
INPUT:
        BASE_URL/users/getdoctorslist/4

您的API需要值$center_id,但您没有传递该值。你要求网址是

"http://192.168.1.80/aoplnew/api/users/getdoctorslist/{center_id}"

请发送center_id的值。

试试这个

final String url = "http://192.168.1.80/aoplnew/api/users/getdoctorslist/4";

    // prepare the Request
    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(JSONObject response) { 
                    try {
                      //Parsing the fetched JSON String to JSON Object
                        j = new JSONObject(response);

                        //Storing the Array of JSON String to our JSON Array
                        result = j.getJSONArray(Config.JSON_ARRAY);

                        //Calling method getStudents to get the students from the JSON Array
                        getDoctors(result);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("Error.Response", response);
                }
            }
    );

    // add it to the RequestQueue   
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());

//向队列requestQueue.add(stringRequest)添加请求;

© www.soinside.com 2019 - 2024. All rights reserved.