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

Android 通过远程数据初始化数组,android,arrays,Android,Arrays,我正在学习android,并尝试开发一个项目。出于项目目的,我想使用远程数据初始化一个数组。虽然我不知道,但有没有可能 假设这是一个数组 String values[] = {"a","b","c","d","e"}; 这个数组已初始化,但我想初始化它以使用来自远程服务器的一些数据。远程服务器数据是JSON编码的 有没有可能 如果可能的话,我怎么做 如果不可能,我该怎么办?publicstringreadjsonfeed(stringurl)抛出JSONException{ public St

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

假设这是一个数组

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
}