Когда выбран элемент в одном из двух видов счетчиков, другой должен быть заполнен автоматически. Все это с использованием только локального файла json в папке с ресурсами

Я новичок в Android. У меня есть 2 вида прядильщика, и я хочу выполнить действие, в котором, если какой-либо из элементов представления прядильщика выбран, другой элемент прядильщика выбирается автоматически в зависимости от того, который выбран в одном из двух представлений прядильщика. и все данные для представления счетчика находятся в локальном файле json в папке ресурсов

мой файл Java,

package com.example.vibhanshutyagi.spinnerexample2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    String json = null;
    public String loadJSONFromAsset() {

        try {
            InputStream is = getAssets().open("CustomerList.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;
    }
        @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            try {

                Spinner spinner = findViewById(R.id.spinner_01);
                List<String> items = new ArrayList<>();

                Spinner spinner1 = findViewById(R.id.spinner_02);
                List<String> item = new ArrayList<>();

                JSONObject obj = new JSONObject(loadJSONFromAsset());
                JSONArray array = obj.getJSONArray("Sheet1");

                JSONObject obj1 = new JSONObject(loadJSONFromAsset());
                JSONArray array1 = obj1.getJSONArray("Sheet2");
            /*this.setTitle(root.getString("title"));*/

                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    items.add(object.getString("FIELD1"));
                //    item.add(object.getString("FIELD2"));
                //    items.add(object.getString("FIELD3"));
                }

                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = array.getJSONObject(i);
                //    items.add(object.getString("FIELD1"));
                    item.add(object.getString("FIELD2"));
                }

                ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
                spinner.setAdapter(adapter);
                ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_list_item_1, item);
                spinner1.setAdapter(adapter1);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
}`

мой файл json,

    {    "Sheet1": [   {
    "FIELD1": "BEDROOM 1",
    "FIELD2": "1"


  },   {
    "FIELD1": "BEDROOM 2",
    "FIELD2": "2"

  },   {
    "FIELD1": "BEDROOM 3",
    "FIELD2": "3"

  },   {
    "FIELD1": "LIVING ROOM",
    "FIELD2": "4"

  },   {
    "FIELD1": "DINING ROOM",
    "FIELD2": "5"

  },   {
    "FIELD1": "KITCHEN",
    "FIELD2": "6"

  },   {
    "FIELD1": "TOILET 1",
    "FIELD2": "7"

  } ],   "Sheet2": [
    {
      "FIELD1": "BEDROOM 1",
      "FIELD2": "1"


    },
    {
      "FIELD1": "BEDROOM 2",
      "FIELD2": "2"

    },
    {
      "FIELD1": "BEDROOM 3",
      "FIELD2": "3"

    },
    {
      "FIELD1": "LIVING ROOM",
      "FIELD2": "4"

    },
    {
      "FIELD1": "DINING ROOM",
      "FIELD2": "5"

    },
    {
      "FIELD1": "KITCHEN",
      "FIELD2": "6"

    },
    {
      "FIELD1": "TOILET 1",
      "FIELD2": "7"
    }   ] }

мой xml-файл spinner_layout,

 <TextView
    android:id = "@+id/text11"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content" />

мой основной файл xml,

   <Spinner
   android:id = "@+id/spinner_01"
   android:layout_width = "wrap_content"
   android:layout_height = "wrap_content"
   android:layout_marginEnd = "16dp"
   android:layout_marginTop = "16dp"
   app:layout_constraintEnd_toEndOf = "parent"
   app:layout_constraintTop_toTopOf = "parent"
   android:layout_marginRight = "16dp">    </Spinner>    <Spinner
   android:id = "@+id/spinner_02"
   android:layout_width = "wrap_content"
   android:layout_height = "wrap_content"
   android:layout_marginStart = "16dp"
   android:layout_marginTop = "83dp"
   app:layout_constraintStart_toStartOf = "parent"
   app:layout_constraintTop_toTopOf = "parent"
   android:layout_marginLeft = "16dp">    </Spinner>

что ты уже испробовал?

tung 01.05.2018 11:53

если вы хотите выбрать второй счетчик автоматически, вам не нужно создавать второй счетчик, потому что, если вы выберете Filed one, вы знаете значение для первого поля, поэтому возьмите TextView установленный текст в нем в соответствии с вашим выбором.

Farhana Naaz Ansari 01.05.2018 12:00

Я видел ваш код, почему вы берете два прядильщика, создаете Custom Bean и Custom Adapter и заполняете объект bean.

Farhana Naaz Ansari 01.05.2018 12:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
75
2

Ответы 2

Не уверен, что вы хотите это сделать:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    String json = null;
    Spinner spinner;
    Spinner spinner1;

    public String loadJSONFromAsset() {

        try {
            InputStream is = getAssets().open("CustomerList.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;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {

            spinner = findViewById(R.id.spinner_01);
            List<String> items = new ArrayList<>();
            spinner.setOnItemClickListener(this);

            spinner1 = findViewById(R.id.spinner_02);
            List<String> item = new ArrayList<>();

            JSONObject obj = new JSONObject(loadJSONFromAsset());
            JSONArray array = obj.getJSONArray("Sheet1");

            JSONObject obj1 = new JSONObject(loadJSONFromAsset());
            JSONArray array1 = obj1.getJSONArray("Sheet2");
        /*this.setTitle(root.getString("title"));*/

            for (int i = 0; i < array.length(); i++) {
                JSONObject object = array.getJSONObject(i);
                items.add(object.getString("FIELD1"));
                //    item.add(object.getString("FIELD2"));
                //    items.add(object.getString("FIELD3"));
            }

            for (int i = 0; i < array.length(); i++) {
                JSONObject object = array.getJSONObject(i);
                //    items.add(object.getString("FIELD1"));
                item.add(object.getString("FIELD2"));
            }

            ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
            spinner.setAdapter(adapter);
            ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_list_item_1, item);
            spinner1.setAdapter(adapter1);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        spinner1.setSelection(position);
    }
}

этот ответ бесполезен и не решает мою цель, но спасибо за помощь Сабе

Vibhanshu Tyagi 01.05.2018 12:32

Не могли бы вы пояснить, что вы подразумеваете под автозаполнением? Из этого предложения if any one of the spinner view item is selected the other spinner item gets selected automatically я понял, что вы хотите выбрать другой на основе положения текущего.

Saba 01.05.2018 12:36

Когда мы выбираем элемент в счетчике 1, затем в счетчике 2 некоторый элемент, связанный с этим элементом, должен быть выбран автоматически, и наоборот, но данные, связанные с этим, хранятся в локальном файле json.

Vibhanshu Tyagi 01.05.2018 13:15

Вы можете добавить следующий код в конец вашего метода onCreate

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                spinner1.setSelection(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });

        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                spinner.setSelection(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });

Вот снимок вывода Output

Он не компилируется или не соответствует вашим требованиям?

Fahed Yasin 01.05.2018 13:48

приложение на AVD не открывается

Vibhanshu Tyagi 01.05.2018 14:03

Пожалуйста, поделитесь своими данными о сбоях logcat

Fahed Yasin 01.05.2018 14:06

Другие вопросы по теме