使用提供更新JSON对象的Web服务

时间:2014-09-19 15:42:18

标签: java json web-services feed

我需要学校项目的帮助,我需要连接到一个Web服务,提供每3或4秒更新一次的JSON文档,使用它并使用包含的一些信息。 JSON看起来像这样:

{   “firstName”:“John”,
  “lastName”:“史密斯”,
  “isAlive”:真实,
  “年龄”:25,
  “height_cm”:167.6,
  “地址”:{
    “streetAddress”:“21 2nd Street”,
    “城市”:“纽约”,
    “州”:“纽约”,
    “postalCode”:“10021-3100”
  },
  “phoneCalls”:[
    {
      “类型”:“家”,
      “号码”:“212 555-1234”,
      “持续时间”:“32”
    },
    {
      “类型”:“办公室”,
      “号码”:“646 555-4567”,
      “持续时间”:“79”
    }
  ]
}

每隔x秒使用添加到文档中的随机调用更新Json文件, 我需要使用这些信息。

我不确定如何连接到本地Web服务,并从此更新文档中检索此信息,我想使用JAVA,但如果有更好的解决方案,请告诉我。

感谢您提供给我的所有提示。

1 个答案:

答案 0 :(得分:0)

请参阅此示例,了解如何通过Java中的http从给定URL返回JSONObject。这包括对基本身份验证的支持,您可能需要也可能不需要它。

您要做的是使用计时器调用此方法根据需要刷新Feed。

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Base64;

......其他进口

public static JSONObject readJSONFeed(String URL, String username,
        String password) throws KeyManagementException,
        UnrecoverableKeyException, NoSuchAlgorithmException,
        KeyStoreException, ClientProtocolException, IOException {

    String auth = username + ":" + password;
    HttpClient httpClient = = new DefaultHttpClient;

    StringBuilder stringBuilder = new StringBuilder();

    // Build HTTP request
    HttpPost httpPost = new HttpPost(URL);
    httpPost.setHeader(
            "Authorization",
            "Basic "
                    + Base64.encodeToString(auth.getBytes(), Base64.NO_WRAP));
    httpPost.setHeader("Accept", "application/json");

    // send the request
    HttpResponse response = httpClient.execute(httpPost);

    // read the result
    StatusLine statusLine = response.getStatusLine();
    int statusCode = statusLine.getStatusCode();
    if (statusCode == 200) {
        HttpEntity entity = response.getEntity();
        InputStream inputStream = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
        inputStream.close();
    } else if (statusCode == 401) {
        throw new IOException("Authentication failed");
    } else {
        throw new IOException(statusLine.getStatusCode() + ":"
                + statusLine.getReasonPhrase());
    }

    // Return the JSON Object
    return new JSONObject(stringBuilder.toString());
}

之后,您可以使用JSONObject类的方法检索数据,例如getInt(String)getString(String)。您可以使用getJSONObject(String)获取嵌套对象。全部通过提供一个字符串,其中字段/对象的名称为参数。