2016-02-12 2 views
0

Я получаю сообщение об ошибке при создании объекта JSONObject путем передачи строки.Org.json.JSONException: Unterminated string at character

Org.json.JSONException: Unterminated string at character 

Моя JSON строка:

{"Count":741,"Data":[{rec1....},{rec2...}, etc]} 

Это, кажется, только в том случае на Linux, как я разработал в Windows, и она работала хорошо. Кроме того, проблема, похоже, связана с тем, что строка слишком длинная. Я сократил массив более чем на половину, и проблема исчезла.

Что я могу сделать, чтобы исправить эту проблему или если есть обходной путь?

+0

Откуда вы берете строку? Возможно, строка обрезается _ перед тем, как она передается в библиотеку JSON. –

+0

Ну 'rec1' недействителен JSON. Пожалуйста, укажите короткий, но * полный * пример, демонстрирующий проблему, и объясните, как вы получаете строку, что может вызвать проблемы. –

+0

Я читаю его из файла, используя этот 1-liner 'String jsonString = new Scanner (новый файл (источник)). UseDelimiter (" \\ Z "). Next();' – drum

ответ

1

, если вы используете AsyncTask в студии Android, чтобы проконсультироваться с HttpURLConnectionin в mysql или другом Gestor базы данных. Существует метод под названием «String downloadUrl (String myurl)», есть переменная «int len ​​= 500;» для чтения данных в inmputStream вы изменяете эту переменную для числа caracther, который вам нужно прочитать.

private String downloadUrl(String myurl) throws IOException { 
    Log.i("URL",""+myurl); 
    myurl = myurl.replace(" ","%20"); 
    InputStream is = null; 
    // Only display the first 500 characters of the retrieved 
    // web page content. 
    <b>int len = 1500; </b> 

    try { 
     URL url = new URL(myurl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000 /* milliseconds */); 
     conn.setConnectTimeout(15000 /* milliseconds */); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     // Starts the query 
     conn.connect(); 
     int response = conn.getResponseCode(); 
     Log.d("respuesta", "The response is: " + response); 
     is = conn.getInputStream(); 

     // Convert the InputStream into a string 
     String contentAsString = readIt(is, len); 
     return contentAsString; 

     // Makes sure that the InputStream is closed after the app is 
     // finished using it. 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 
0

@ Даниэла правильно поняла проблему. Я использовал тот же код, что и на веб-сайте разработчика. Мое исправление ниже:

InputStreamReader reader = new InputStreamReader(stream); 
    BufferedReader br = new BufferedReader(reader); 
    StringBuilder sb = new StringBuilder(); 
    String line; 
    while ((line = br.readLine()) != null) { 
     sb.append(line+"\n"); 
    } 
    br.close(); 
    return sb.toString(); 

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

  • Нет связанных вопросов^_^