Распечатать файл JSON в TextView - PullRequest
0 голосов
/ 03 октября 2019

Вот мой json-файл: settings.json (в папке assets):

{
  "settings": [
    {
      "level": "upper"
    }
  ]
}

Я работаю в Android Studio. Я печатаю верхнее слово в TextView из файла json, но это не работает, мое приложение не работает. Идеи? мой код в файле Java:

public class MainActivity extends AppCompatActivity {
    ArrayList<String> level = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {

            JSONObject obj = new JSONObject(loadJSONFromAsset());

            JSONArray userArray = obj.getJSONArray("settings");

            for (int i = 0; i < userArray.length(); i++) {

                JSONObject userDetail = userArray.getJSONObject(i);

                level.add(userDetail.getString("level"));
            }
            } catch(JSONException e){
                e.printStackTrace();

            }
        TextView textView = (TextView) findViewById(R.id.textView);

        textView.setText(level.get(0));

        setContentView(R.layout.activity_main);
    }
    public String loadJSONFromAsset() {
        String json = null;
        try {
            InputStream is = getAssets().open("settings.json");

            int size = is.available();

            byte[] buffer = new byte[size];

            is.read(buffer);

            is.close();

            json = new String(buffer, "UTF-8");


        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

Спасибо. Android, JSON, исходный код ...

Ответы [ 2 ]

1 голос
/ 03 октября 2019

А почему еще работает в функции if? Запись уровня выше. Почему не правда, если?

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        try {
            // get JSONObject from JSON file
            JSONObject obj = new JSONObject(loadJSONFromAsset());
            // fetch JSONArray named users
            JSONArray userArray = obj.getJSONArray("settings");
            // implement for loop for getting users list data
            for (int i = 0; i < userArray.length(); i++) {
                // create a JSONObject for fetching single user data
                JSONObject userDetail = userArray.getJSONObject(i);
                // fetch email and name and store it in arraylist
                level.add(userDetail.getString("level"));
            }
            } catch(JSONException e){
                e.printStackTrace();

            }
        TextView textView = (TextView) findViewById(R.id.textView);

        if (level.get(0) == "upper") {
            textView.setText(level.get(0));
        } else {

        }
0 голосов
/ 03 октября 2019

Я надеюсь, что это сработает для вас,

Напишите ваш onCreate() метод, подобный этому,

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {

            JSONObject obj = new JSONObject(loadJSONFromAsset());
            JSONArray userArray = obj.getJSONArray("settings");
            for (int i = 0; i < userArray.length(); i++) {
                JSONObject userDetail = userArray.getJSONObject(i);
                level.add(userDetail.getString("level"));
            }
            } catch(JSONException e){
                e.printStackTrace();

            }
        TextView textView = (TextView) findViewById(R.id.textView);

        textView.setText(level.get(0));
    }

установите метод setContentView(), а затем инициализируйте текстовое представление. В вашем коде выдоступ к просмотру текста до инициализации макета.

...