2015-01-30 2 views
-1

Я изучаю Android и пытаюсь разработать проект. Для цели проекта я хочу инициализировать массив, используя удаленные данные. Хотя я не знаю, возможно это или нет!Инициализировал массив удаленными данными

предположит, что это массив

String values[] = {"a","b","c","d","e"}; 

Этот массив инициализирован, но я хочу, чтобы инициализировать его, чтобы использовать некоторые данные, которые приходят с удаленным сервера. И данные удаленного сервера кодируются JSON.

Возможно ли это или нет?

если возможно, то как я могу это сделать?

если не возможно, так что делать?

+0

читать json и инициализировать ваш массив. –

ответ

0

Да, это возможно. Вам нужно сделать код, чтобы получить данные с вашего сервера. Вот пример использования 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 
} 

Итак, ваш массив инициализирован.

Наслаждайтесь этим.

-1
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()); 
     } 

    } 
} 

Это пример кода, я пишу, чтобы использовать метод Post, чтобы получить некоторые данные с веб-service.According к вашей структуре JSon, вы можете добавить код для синтаксического анализа соответствующих данных из JSONObject. Конечно, вы можете использовать методы GET для получения данных и использования некоторых других параметров. Я надеюсь, что это поможет вам. Кстати, я использую класс AsyncTask для загрузки данных, асинхронных.

0

Вы можете использовать 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)

0

Вы можете сделать что-то вроде this-

конвертировать ваш json в строку затем

jsonString.replace("},{", " ,"); 
String values[] = jsonString.split(" "); 

это устранит внутреннее «}, {» и вы будете иметь окончательную строку типа { «а», «б», «в»} просто играть с этим.

Смежные вопросы