我需要学校项目的帮助,我需要连接到一个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,但如果有更好的解决方案,请告诉我。
感谢您提供给我的所有提示。
答案 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)
获取嵌套对象。全部通过提供一个字符串,其中字段/对象的名称为参数。