2013-07-09 4 views
-1

Я хочу получить данные из URL-адреса JSON. Он содержит 22 поля и имеет более 6000 строк. Я хочу проанализировать данные JSON и сохранить их в базе данных SQLite.Подкачка базы данных в Android

Я знаю основы JSON, но когда я его использую, я получаю ошибку «из памяти». После много R & D и googling Я обнаружил, что мне нужно использовать GSON для Heavy URL, но я не знаком с ним.

Могу ли я реализовать пейджинг в JSON? Другими словами, могу ли я сделать что-то вроде получения частичных данных из JSON и хранения его в базе данных, а затем запросить определенные данные и сохранить их в базе данных, продолжая процесс до тех пор, пока не будет проанализирован полный файл JSON?

ответ

0

Вы должны реализовать механизм разбиения на страницы на стороне сервера (тот, который обслуживает данные JSON) и параметры диапазона прохождения в качестве части указанного вами URL-адреса.

+0

ok. могу ли я реализовать структуру, которая «получает частичные данные из json и сохраняет в db, а затем получает частичные данные agin». –

+0

Да, это то, что я сказал точно. Но вы должны сделать это на стороне ** сервера **, а не на клиенте. Но это не «структура», это часть кода в основном. –

+0

Но тот же URL-адрес отлично работает на iPhone. Я не знаю, как это сделать? но это не вопрос. Мой вопрос: что мне делать с стороны Andorid? –

0

Если бы я знал, что у меня будет много строк/данных, я бы запустил простой SQL-запрос, чтобы определить размер данных. Затем разбейте оригинальный JSON на Android, чтобы обрабатывать данные в меньших кусках, совершая после каждого сегмента. Итак, в вашем примере вы знаете, что у вас есть 6000+ строк - сохраните это в памяти в Android как int, а затем вызовите 1000 строк за раз.

Часть кода после дальнейших запросов:

String locationCountPath = "http://mywebserver/countAllMD5UserLocations"; 
    try { 
     //My method to return a count of locations 
     int locCount = MyJSONUtilities.countAllUsersLocations(
       locationCountPath, MyJSONUtilities.writeUserDetailsJSON(
         username.toUpperCase(), password)); 
     // Compare new count with count on phone 
     if (countLocs != locCount && locCount > 0) { 
      try { 
       // Grab the new set of locations 
       askToSyncLocations(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Итак, если вы замените askToSyncLocations() метод с вашим собственным способом обработки ваших 6000+ строк в цикле, как порционные 1000 в то время, он должен не сталкиваются с проблемами памяти?

+0

любой код или пример, как его реализовать? –

+0

Это действительно зависит от того, как организованы ваши данные, код слишком специфичен для ввода здесь. Как я уже говорил выше, можете ли вы заранее разобраться, сколько строк возвращает ваш основной SQL (вызов веб-службы от android)? У меня есть пример кода, но нужно знать, что вы понимаете, что я получаю вначале. – iaindownie

+0

Некоторый код добавлен в мой первоначальный ответ. – iaindownie

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