2012-01-26 3 views
0
class Talk { 
     String[] values; 
     try { 
      InputStream is = getAssets().open("jdata.txt"); 
      DataInputStream in = new DataInputStream(is); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

      //Read File Line By Line 
      while ((br.readLine()) != null) { 
       // Print the content on the console 
       strLine = strLine + br.readLine(); 
      } 
     } catch (Exception e) { //Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 
     parse(strLine); 
    } 

    public void parse(String jsonLine) { 
     Data data = new Gson().fromJson(jsonLine, Data.class); 
     values[0]= data.toString(); 
     return; 
    } 
} 

Это в jdata.txt:java.lang.IllegalStateException: Ожидаемая ошибка BEGIN_OBJECT

"{" + "'users':'john' + "}" 

Это мой Data.java:

public class Data { 
    public String users; 
} 

Я получаю ошибку является:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 9 

Может ли кто-либо из я понял, что означает эта ошибка и как ее удалить?

EDIT:

У меня есть ответ. Это те настройки, которые я должен был сделать. Сначала измените массив String на список массивов.

List<String> values = new ArrayList<String>(); 

Следующая твик здесь:

strLine = currentLine; 
       currentLine = br.readLine(); 
       //Read File Line By Line 
       while (currentLine != null) { 
       // Print the content on the console 

        strLine = strLine + currentLine; 
        currentLine = br.readLine(); 
       } 

Окончательный твик был здесь:

String val = data.toString(); 
values.add(val); 

Некоторые части кода может быть излишним, но я буду заботиться о том, что позже.

+0

ваш JSON является недействительным, это правильный формат JSON '{ "пользователи": "джон" }' – RanRag

+0

@RanRag Пытались что. Не работает. Поэтому он изменил его, пытаясь получить правильный результат. – Hick

ответ

1

Вы звоните readLine() дважды. Ниже вызывает линия для чтения из файла и потерял:

while ((br.readLine()) != null) { 

Изменение цикла к:

//Read File Line By Line 
String currentLine = br.readLine(); 
while (currentLine != null) { 
    // Print the content on the console 
    strLine = strLine + currentLine; 
    currentLine = br.readLine(); 
} 

Кроме того, содержание jdata.txt должно быть:

{"users":"john"} 

без избыточное + или " символов.

+0

Сделал это. Тем не менее ошибка сохраняется. – Hick

+0

Вы пробовали отладить его? Вы проверили, что строка, которую вы передаете в Gson, верна?Поскольку Gson является открытым исходным кодом, вы можете также отлаживать его код. –

+0

Я отлаживал. После этой строки код прерывается: Data data = new Gson(). FromJson (jsonLine, Data.class); – Hick

0

За исключением вопросов, упомянутых @Eli.

Это способ использования Gson Library для анализа json.

Gson gson = new Gson(); 
Data data = gson.fromJson(jsonLine, Data.class); 
System.out.println("users:" + data.getusers()); 

Теперь файл мой Data.java

public class Data { 

public String users; 

public String getusers() { 
return users; 
     } 

Выход =

JSonString в jdata.txt = { "пользователей": "Джон"}

пользователей: John // после разбора json.