Как манипулировать данными после их получения через удаленную базу данных - PullRequest
0 голосов
/ 11 января 2011

Итак, я использовал примеры кода со всей сети и получил мое приложение для точного вызова файла .php на моем сервере, получения данных JSON, затем их анализа и печати. ​​

Проблема в том, что он просто выводит на экран ради учебника, которому я следовал, но теперь мне нужно использовать эти данные в других местах и ​​мне нужна помощь в выяснении этого процесса.

Конечная цель - вернуть мой запрос в БД с координатами карты, а затем нанести их на карту Google. У меня есть другое приложение, в котором я вручную рисую точки на карте, поэтому я буду интегрировать это приложение с этим, как только смогу разобраться, как правильно манипулировать возвращенными данными.

        public class Remote extends Activity {
    /** Called when the activity is first created. */

       TextView txt;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Create a crude view - this should really be set via the layout resources
        // but since its an example saves declaring them in the XML.
        LinearLayout rootLayout = new LinearLayout(getApplicationContext());
        txt = new TextView(getApplicationContext());
        rootLayout.addView(txt);
        setContentView(rootLayout);

        // Set the text and call the connect function.
        txt.setText("Connecting...");
        //call the method to run the data retreival
        txt.setText(getServerData(KEY_121));


    }
    public static final String KEY_121 = "http://example.com/mydbcall.php";

    private String getServerData(String returnString) {

       InputStream is = null;

       String result = "";
        //the year data to send
        //ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        //nameValuePairs.add(new BasicNameValuePair("year","1970"));

        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(KEY_121);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();

        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }

        //convert response to string
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }
        //parse json data

        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                        Log.i("log_tag","longitude: "+json_data.getDouble("longitude")+
                                ", latitude: "+json_data.getDouble("latitude")
                        );
                        //Get an output to the screen
                        returnString += "\n\t" + jArray.getJSONObject(i);
                }
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return returnString;
    }   

    }

Итак, код:

returnString += "\n\t" + jArray.getJSONObject(i);

- это то, что в данный момент выводится на экран.

Что мне нужно выяснить, так это как получить данные во что-то, на что я могу ссылаться в других местах программы, и получить доступ к отдельным элементам то есть:

double longitude = jArray.getJSONObject(3).longitude; 

или что-то на этот счет ..

Я полагаю, класс getServerData должен будет возвращать тип Array или что-то еще?

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 11 января 2011

Прежде всего, вы не должны делать серверные вызовы в потоке пользовательского интерфейса. Используйте AsyncTask или Service для выполнения удаленных вызовов в отдельном потоке.

Далее, я не знаю точную структуру вашего возвращенного Json, но похоже, что вы хотите преобразовать его в более чистую объектную модель. Просто создайте объект, который имеет поле для каждой записи в вашем массиве Json, и замените ваши операторы журнала на операторы присваивания. То есть:

class Location {
  private double latitude;
  private double longitude;
  public Location(double latitude, double longitude) { ....}
}

private List<Location> getServerData(String returnString) {
 List<Location> result = new ArrayList<Location>();
 JSONArray jArray = new JSONArray(result);
 for(int i=0;i<jArray.length();i++){
    Location loc = new Location(json_data.getDouble("latitude"), json_data.getDouble("longitude"));
    result.add(loc);
 }
 return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...