Android 通过远程数据初始化数组
我正在学习android,并尝试开发一个项目。出于项目目的,我想使用远程数据初始化一个数组。虽然我不知道,但有没有可能 假设这是一个数组Android 通过远程数据初始化数组,android,arrays,Android,Arrays,我正在学习android,并尝试开发一个项目。出于项目目的,我想使用远程数据初始化一个数组。虽然我不知道,但有没有可能 假设这是一个数组 String values[] = {"a","b","c","d","e"}; 这个数组已初始化,但我想初始化它以使用来自远程服务器的一些数据。远程服务器数据是JSON编码的 有没有可能 如果可能的话,我怎么做 如果不可能,我该怎么办?publicstringreadjsonfeed(stringurl)抛出JSONException{ public St
String values[] = {"a","b","c","d","e"};
这个数组已初始化,但我想初始化它以使用来自远程服务器的一些数据。远程服务器数据是JSON编码的
有没有可能
如果可能的话,我怎么做
如果不可能,我该怎么办?publicstringreadjsonfeed(stringurl)抛出JSONException{
public String readJSONFeed(String URL)throws JSONException {
StringBuilder stringBuilder = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL);
httpPost.setHeader("Content-Type",
"application/json");
JSONObject params=new JSONObject();
params.put("latitude", 43.6014049);
params.put("longitude",1.4478449);
try {
httpPost.setEntity(new StringEntity(params.toString()));
HttpResponse response = httpClient.execute(httpPost);
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 {
Log.d("JSON", "Failed to download file");
}
} catch (Exception e) {
Log.d("readJSONFeed", e.getLocalizedMessage());
}
return stringBuilder.toString();
}
private class ReadJSONFeedTask extends AsyncTask<String, Void, String> {
String url=.......................;
protected void onPreExecute(){
super.onPreExecute();
}
protected String doInBackground(String... urls) {
try {
return readJSONFeed(url);
}catch (JSONException jsonException){
return null;
}
}
protected void onPostExecute(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
// code to parse the jsonObject and assign it to your array
}catch (Exception e) {
Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage());
}
}
}
StringBuilder StringBuilder=新的StringBuilder();
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(URL);
setHeader(“内容类型”,
“应用程序/json”);
JSONObject参数=新的JSONObject();
参数put(“纬度”,43.6014049);
参数put(“经度”,1.4478449);
试一试{
setEntity(新的StringEntity(params.toString());
HttpResponse response=httpClient.execute(httpPost);
StatusLine StatusLine=response.getStatusLine();
int statusCode=statusLine.getStatusCode();
如果(状态代码==200){
HttpEntity=response.getEntity();
InputStream InputStream=entity.getContent();
BufferedReader reader=新的BufferedReader(
新的InputStreamReader(inputStream));
弦线;
而((line=reader.readLine())!=null){
stringBuilder.append(行);
}
inputStream.close();
}否则{
Log.d(“JSON”,“未能下载文件”);
}
}捕获(例外e){
d(“readJSONFeed”,例如getLocalizedMessage());
}
返回stringBuilder.toString();
}
私有类ReadJSONFeedTask扩展了AsyncTask{
字符串url=。。。。。。。。。。。。。。。。。。。。。。。;
受保护的void onPreExecute(){
super.onPreExecute();
}
受保护的字符串doInBackground(字符串…URL){
试一试{
返回readJSONFeed(url);
}捕获(JSONException JSONException){
返回null;
}
}
受保护的void onPostExecute(字符串结果){
试一试{
JSONObject JSONObject=新JSONObject(结果);
//用于解析jsonObject并将其分配给数组的代码
}捕获(例外e){
d(“ReadWeatherJSONFeedTask”,例如getLocalizedMessage());
}
}
}
这是我编写的一个示例代码,用于使用Post方法从web服务获取一些数据。根据您的json结构,您可以添加一些代码来解析来自JSONObject的正确数据。当然,您可以使用GET方法来获取数据和使用其他一些参数。我希望这将对您有所帮助。
顺便说一下,我使用AsyncTask类来下载异步化的数据。您可以使用
ArrayList
// initialize ArrayList of Strings
ArrayList<String> myArray = new ArrayList<>();
// add data to your Array list
myArray.add(yourDatahere);
要从ArrayList打印数据
for (ArrayList<String> data : myArray){
System.out.println(data);
}
for(ArrayList数据:myArray){
系统输出打印项次(数据);
}
要从所需位置检索数据,请使用myArray.get(position)您可以执行以下操作- 然后将json转换为字符串-
jsonString.replace("},{", " ,");
String values[] = jsonString.split(" ");
它将删除内部的“},{”,您将得到最后一个字符串,如{“a”、“b”、“c”}
玩一下这个。是的,这是可能的。您需要做的第一件事是提供一个代码,以便从服务器获取数据。下面是使用POST的示例:
private String sendRequest(String targetUrl) {
//Here, you define how method you'll use. In this case, I'm using POST
HttpPost method = new HttpPost(targetUrl);
HttpParams httpParameters = new BasicHttpParams();
//If you need, place here your TIMEOUT.
HttpConnectionParams.setConnectionTimeout(httpParameters,
<TIME TO OUT IN MILLIS>);
HttpConnectionParams.setSoTimeout(httpParameters, <TIME TO OUT IN MILLIS>);
//Define here your client in order to make requests to your servers
HttpClient client = new DefaultHttpClient(httpParameters);
//If you're using POST method, may be you need to add parameters in your request where it'll be used by your server in order to return a response to you.
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("<PARAMETER'S NAME>", "<PARAMETER'S VALUES>"));
//You may add multiple parameters here
//Here starts your request
try {
//Define your entity
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
entity.setContentEncoding(HTTP.UTF_8);
method.setEntity(entity);
} catch (UnsupportedEncodingException e) {
//In case of any error
Log.e("REQUEST_ERROR", "Something was wrong: " + e);
}
try {
//The string wich will receive your result
String result;
//Send your request
HttpResponse response = client.execute(method);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
BasicManagedEntity entity = (BasicManagedEntity) response.getEntity();
//Get the result
result = EntityUtils.toString(entity);
//Return your result in order to be processed
return result;
} catch(ConnectTimeoutException cte) {
return null;
} catch (UnknownHostException e) {
return null;
} catch (Exception e) {
return null;
}
}
我不知道您的JSON是如何格式化的,但我认为您将它作为JSON中的一个数组,对吗
在这种情况下,您可以执行以下操作:
String[] array;
JSONArray jArray = obj.getJSONArray("<KEY_TO_LETTERS_ARRAY>");
int size = jArray.length();
if (size > 0) {
array = new String[size];
for(int i = 0; i < jArray.length(); i++) {
array[i] = new String(jArray.getString(i));
}
}
现在,数组已初始化
享受它。阅读json并初始化数组。
JSONObject obj = new JSONObject();
obj = new JSONObject(result);
String[] array;
JSONArray jArray = obj.getJSONArray("<KEY_TO_LETTERS_ARRAY>");
int size = jArray.length();
if (size > 0) {
array = new String[size];
for(int i = 0; i < jArray.length(); i++) {
array[i] = new String(jArray.getString(i));
}
}
if(array != null) {
//It's ok
} else {
//Something wrong
}