Java 如何在android中访问从restful web服务传递的json数组?

Java 如何在android中访问从restful web服务传递的json数组?,java,android,json,rest,arrays,Java,Android,Json,Rest,Arrays,我已经成功创建了一个RESTWeb服务,它返回有两个字段的jsonarray 数据库中的id和城市 My resr web service is @得到 我只需要把这些值放到一个微调器中 我的android代码是 public class MainActivity extends Activity { Spinner spinner; private static final String SERVICE_URL = "http://192.168.1.6:8080/eS

我已经成功创建了一个RESTWeb服务,它返回有两个字段的jsonarray 数据库中的id和城市

My resr web service is 
@得到

我只需要把这些值放到一个微调器中

我的android代码是

public class MainActivity extends Activity {

    Spinner spinner;

    private static final String SERVICE_URL = "http://192.168.1.6:8080/eSava_RestWeb/webresources/service";

    private static final String TAG = "AndroidRESTClientActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        spinner = (Spinner) findViewById(R.id.city);
    }

    public void retrieveSampleData(View vw) {

        String sampleURL = SERVICE_URL + "/city";

        WebServiceTask wst = new WebServiceTask(WebServiceTask.GET_TASK,
                this, "GETting data...");

        wst.execute(new String[] { sampleURL });

    }

    @SuppressLint("NewApi")
    public void handleResponse(String response) {

        try {
            // JSONObject jso = new JSONObject(response);
            JSONArray json = new JSONArray(response);

            ArrayList<String> list = new ArrayList<String>();
            JSONArray jsonArray = (JSONArray) json;
            if (jsonArray != null) {
                int len = jsonArray.length();
                for (int i = 0; i < len; i++) {
                    list.add(jsonArray.get(i).toString());
                }
            }

            Spinner s = (Spinner) findViewById(R.id.city);
            ArrayAdapter adapter = new ArrayAdapter(this,
                    android.R.layout.simple_spinner_item, list);
            s.setAdapter(adapter);

        } catch (Exception e) {
            Log.e(TAG, e.getLocalizedMessage(), e);
        }

    }

    private class WebServiceTask extends AsyncTask<String, Integer, String> {

        public static final int POST_TASK = 1;
        public static final int GET_TASK = 2;

        private static final String TAG = "WebServiceTask";

        // connection timeout, in milliseconds (waiting to connect)
        private static final int CONN_TIMEOUT = 3000;

        // socket timeout, in milliseconds (waiting for data)
        private static final int SOCKET_TIMEOUT = 5000;

        private int taskType = GET_TASK;
        private Context mContext = null;
        private String processMessage = "Processing...";

        private ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

        private ProgressDialog pDlg = null;

        public WebServiceTask(int taskType, Context mContext,
                String processMessage) {

            this.taskType = taskType;
            this.mContext = mContext;
            this.processMessage = processMessage;
        }

        public void addNameValuePair(String name, String value) {

            params.add(new BasicNameValuePair(name, value));
        }

        private void showProgressDialog() {

            pDlg = new ProgressDialog(mContext);
            pDlg.setMessage(processMessage);
            pDlg.setProgressDrawable(mContext.getWallpaper());
            pDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            pDlg.setCancelable(false);
            pDlg.show();

        }

        @Override
        protected void onPreExecute() {

            showProgressDialog();

        }

        protected String doInBackground(String... urls) {

            String url = urls[0];
            String result = "";

            HttpResponse response = doResponse(url);

            if (response == null) {
                return result;
            } else {

                try {

                    result = inputStreamToString(response.getEntity()
                            .getContent());

                } catch (IllegalStateException e) {
                    Log.e(TAG, e.getLocalizedMessage(), e);

                } catch (IOException e) {
                    Log.e(TAG, e.getLocalizedMessage(), e);
                }

            }

            return result;
        }

        @Override
        protected void onPostExecute(String response) {

            JSONArray jsArray;
            // jsArray = new JSONArray(response);
            handleResponse(response);
            pDlg.dismiss();

        }

        // Establish connection and socket (data retrieval) timeouts
        private HttpParams getHttpParams() {

            HttpParams htpp = new BasicHttpParams();

            HttpConnectionParams.setConnectionTimeout(htpp, CONN_TIMEOUT);
            HttpConnectionParams.setSoTimeout(htpp, SOCKET_TIMEOUT);

            return htpp;
        }

        private HttpResponse doResponse(String url) {

            // Use our connection and data timeouts as parameters for our
            // DefaultHttpClient
            HttpClient httpclient = new DefaultHttpClient(getHttpParams());

            HttpResponse response = null;

            try {
                switch (taskType) {

                case POST_TASK:
                    HttpPost httppost = new HttpPost(url);
                    // Add parameters
                    httppost.setEntity(new UrlEncodedFormEntity(params));

                    response = httpclient.execute(httppost);
                    break;
                case GET_TASK:
                    HttpGet httpget = new HttpGet(url);
                    response = httpclient.execute(httpget);
                    break;
                }
            } catch (Exception e) {

                Log.e(TAG, e.getLocalizedMessage(), e);

            }

            return response;
        }

        private String inputStreamToString(InputStream is) {

            String line = "";
            StringBuilder total = new StringBuilder();

            // Wrap a BufferedReader around the InputStream
            BufferedReader rd = new BufferedReader(
                    new InputStreamReader(is));

            try {
                // Read response until the end
                while ((line = rd.readLine()) != null) {
                    total.append(line);
                }
            } catch (IOException e) {
                Log.e(TAG, e.getLocalizedMessage(), e);
            }

            // Return full string
            return total.toString();
        }

    }
}
公共类MainActivity扩展活动{
纺纱机;
私有静态最终字符串服务\u URL=”http://192.168.1.6:8080/eSava_RestWeb/webresources/service";
私有静态最终字符串标记=“AndroidRESTClientActivity”;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
微调器=(微调器)findViewById(R.id.city);
}
公共无效检索采样数据(视图vw){
字符串sampleURL=SERVICE_URL+“/city”;
WebServiceTask wst=新的WebServiceTask(WebServiceTask.GET_任务,
这是“获取数据…”;
execute(新字符串[]{sampleURL});
}
@SuppressLint(“新API”)
公共无效句柄响应(字符串响应){
试一试{
//JSONObject jso=新的JSONObject(响应);
JSONArray json=新JSONArray(响应);
ArrayList=新建ArrayList();
JSONArray JSONArray=(JSONArray)json;
if(jsonArray!=null){
int len=jsonArray.length();
对于(int i=0;ipublic class MainActivity extends Activity {

    Spinner spinner;

    private static final String SERVICE_URL = "http://192.168.1.6:8080/eSava_RestWeb/webresources/service";

    private static final String TAG = "AndroidRESTClientActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        spinner = (Spinner) findViewById(R.id.city);
    }

    public void retrieveSampleData(View vw) {

        String sampleURL = SERVICE_URL + "/city";

        WebServiceTask wst = new WebServiceTask(WebServiceTask.GET_TASK,
                this, "GETting data...");

        wst.execute(new String[] { sampleURL });

    }

    @SuppressLint("NewApi")
    public void handleResponse(String response) {

        try {
            // JSONObject jso = new JSONObject(response);
            JSONArray json = new JSONArray(response);

            ArrayList<String> list = new ArrayList<String>();
            JSONArray jsonArray = (JSONArray) json;
            if (jsonArray != null) {
                int len = jsonArray.length();
                for (int i = 0; i < len; i++) {
                    list.add(jsonArray.get(i).toString());
                }
            }

            Spinner s = (Spinner) findViewById(R.id.city);
            ArrayAdapter adapter = new ArrayAdapter(this,
                    android.R.layout.simple_spinner_item, list);
            s.setAdapter(adapter);

        } catch (Exception e) {
            Log.e(TAG, e.getLocalizedMessage(), e);
        }

    }

    private class WebServiceTask extends AsyncTask<String, Integer, String> {

        public static final int POST_TASK = 1;
        public static final int GET_TASK = 2;

        private static final String TAG = "WebServiceTask";

        // connection timeout, in milliseconds (waiting to connect)
        private static final int CONN_TIMEOUT = 3000;

        // socket timeout, in milliseconds (waiting for data)
        private static final int SOCKET_TIMEOUT = 5000;

        private int taskType = GET_TASK;
        private Context mContext = null;
        private String processMessage = "Processing...";

        private ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

        private ProgressDialog pDlg = null;

        public WebServiceTask(int taskType, Context mContext,
                String processMessage) {

            this.taskType = taskType;
            this.mContext = mContext;
            this.processMessage = processMessage;
        }

        public void addNameValuePair(String name, String value) {

            params.add(new BasicNameValuePair(name, value));
        }

        private void showProgressDialog() {

            pDlg = new ProgressDialog(mContext);
            pDlg.setMessage(processMessage);
            pDlg.setProgressDrawable(mContext.getWallpaper());
            pDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            pDlg.setCancelable(false);
            pDlg.show();

        }

        @Override
        protected void onPreExecute() {

            showProgressDialog();

        }

        protected String doInBackground(String... urls) {

            String url = urls[0];
            String result = "";

            HttpResponse response = doResponse(url);

            if (response == null) {
                return result;
            } else {

                try {

                    result = inputStreamToString(response.getEntity()
                            .getContent());

                } catch (IllegalStateException e) {
                    Log.e(TAG, e.getLocalizedMessage(), e);

                } catch (IOException e) {
                    Log.e(TAG, e.getLocalizedMessage(), e);
                }

            }

            return result;
        }

        @Override
        protected void onPostExecute(String response) {

            JSONArray jsArray;
            // jsArray = new JSONArray(response);
            handleResponse(response);
            pDlg.dismiss();

        }

        // Establish connection and socket (data retrieval) timeouts
        private HttpParams getHttpParams() {

            HttpParams htpp = new BasicHttpParams();

            HttpConnectionParams.setConnectionTimeout(htpp, CONN_TIMEOUT);
            HttpConnectionParams.setSoTimeout(htpp, SOCKET_TIMEOUT);

            return htpp;
        }

        private HttpResponse doResponse(String url) {

            // Use our connection and data timeouts as parameters for our
            // DefaultHttpClient
            HttpClient httpclient = new DefaultHttpClient(getHttpParams());

            HttpResponse response = null;

            try {
                switch (taskType) {

                case POST_TASK:
                    HttpPost httppost = new HttpPost(url);
                    // Add parameters
                    httppost.setEntity(new UrlEncodedFormEntity(params));

                    response = httpclient.execute(httppost);
                    break;
                case GET_TASK:
                    HttpGet httpget = new HttpGet(url);
                    response = httpclient.execute(httpget);
                    break;
                }
            } catch (Exception e) {

                Log.e(TAG, e.getLocalizedMessage(), e);

            }

            return response;
        }

        private String inputStreamToString(InputStream is) {

            String line = "";
            StringBuilder total = new StringBuilder();

            // Wrap a BufferedReader around the InputStream
            BufferedReader rd = new BufferedReader(
                    new InputStreamReader(is));

            try {
                // Read response until the end
                while ((line = rd.readLine()) != null) {
                    total.append(line);
                }
            } catch (IOException e) {
                Log.e(TAG, e.getLocalizedMessage(), e);
            }

            // Return full string
            return total.toString();
        }

    }
}
String[] city= {};
String[] id= {};

JSONArray jsonDetailsObj = json.getJSONArray("cityList");
JSONObject jsonLoop = null; 
int noOfPoints = jsonDetailsObj.length();

city= new String[noOfPoints];
id= new String[noOfPoints];


for (int i=0 ; i < noOfPoints ; i++)
{
   jsonLoop=jsonDetailsObj.getJSONObject(i);
   city [i] = jsonLoop.getString("CityName");
   id[i] = jsonLoop.getString("ID");
}
public class Sample{
  public Sample()
  {

  }
  @SerializedName("Name")//if needed
  String name;
  @SerializedName("Email")//if needed
  String email;
  public void set(String name) {
        this.name = name;
    }

  public String getName() {
        return name;
    }
  public void set(String email) {
        this.email = email;
    }

  public String getEmail() {
        return email;
    }
}
Sample sample = gson.fromJson(jsonRes.toString(), Sample.class);