首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过远程数据初始化数组

通过远程数据初始化数组
EN

Stack Overflow用户
提问于 2015-01-30 13:37:42
回答 4查看 82关注 0票数 0

我正在学习android,并尝试开发一个项目。出于项目目的,我希望使用远程数据初始化数组。虽然我不知道,这有可能吗?

假设,这是一个数组

代码语言:javascript
复制
String values[] = {"a","b","c","d","e"};

这个数组是初始化的,但是我想要初始化它,以使用来自远程服务器的一些数据。远程服务器数据是JSON编码的。

有可能吗?

如果可能的话,我该怎么做?

如果不可能,我该怎么办?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-30 14:26:52

是的,有可能。您需要做的第一件事是提供代码,以便从服务器获取数据。这里有一个使用POST的示例:

代码语言:javascript
复制
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类型:

代码语言:javascript
复制
JSONObject obj = new JSONObject();
obj = new JSONObject(result);

我不知道您的JSON是如何形成的,但我认为您将它作为JSON中的数组,对吗?

在这种情况下,您可以这样做:

代码语言:javascript
复制
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时,才初始化数组。

代码语言:javascript
复制
if(array != null) {
  //It's ok
} else {
  //Something wrong
}

现在,您的数组被初始化了。

尽情享受吧。

票数 0
EN

Stack Overflow用户

发布于 2015-01-30 13:59:22

你可以用ArrayList代替,

代码语言:javascript
复制
// initialize ArrayList of Strings
ArrayList<String> myArray = new ArrayList<>();

// add data to your Array list
myArray.add(yourDatahere);

您可以向myArray中添加任意数量的数据,因为ArrayList大小是动态的。

增加更多的数据,

代码语言:javascript
复制
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);
myArray.add(yourDatahere);

要打印来自ArrayList的数据,

代码语言:javascript
复制
for (ArrayList<String> data : myArray){
        System.out.println(data);
}

若要从所需位置检索数据,请使用myArray.get(position)

票数 0
EN

Stack Overflow用户

发布于 2015-01-30 14:11:43

你可以这样做-

把你的json转换成字符串然后-

代码语言:javascript
复制
jsonString.replace("},{", " ,");
String values[] = jsonString.split(" ");

它将删除内部的"},{“,您将有您的最后字符串,如{"a","b",”c“,只需播放此命令即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28237124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档