我正在学习android,并尝试开发一个项目。出于项目目的,我希望使用远程数据初始化数组。虽然我不知道,这有可能吗?
假设,这是一个数组
String values[] = {"a","b","c","d","e"};这个数组是初始化的,但是我想要初始化它,以使用来自远程服务器的一些数据。远程服务器数据是JSON编码的。
有可能吗?
如果可能的话,我该怎么做?
如果不可能,我该怎么办?
发布于 2015-01-30 14:26:52
是的,有可能。您需要做的第一件事是提供代码,以便从服务器获取数据。这里有一个使用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;
}
}在此之后,通过编写以下命令调用此函数:
String result = sendRequest(<URL HERE>);
现在您可以处理JSON数据了。通过知道响应是字符串类型但以JSON格式,您需要添加以下代码才能从字符串中获得JSON类型:
JSONObject obj = new JSONObject();
obj = new JSONObject(result);我不知道您的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数组的大小大于0时,才初始化数组。
if(array != null) {
//It's ok
} else {
//Something wrong
}现在,您的数组被初始化了。
尽情享受吧。
发布于 2015-01-30 13:59:22
你可以用ArrayList代替,
// initialize ArrayList of Strings
ArrayList<String> myArray = new ArrayList<>();
// add data to your Array list
myArray.add(yourDatahere);您可以向myArray中添加任意数量的数据,因为ArrayList大小是动态的。
增加更多的数据,
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);要打印来自ArrayList的数据,
for (ArrayList<String> data : myArray){
System.out.println(data);
}若要从所需位置检索数据,请使用myArray.get(position)
发布于 2015-01-30 14:11:43
你可以这样做-
把你的json转换成字符串然后-
jsonString.replace("},{", " ,");
String values[] = jsonString.split(" ");它将删除内部的"},{“,您将有您的最后字符串,如{"a","b",”c“,只需播放此命令即可。
https://stackoverflow.com/questions/28237124
复制相似问题