【问题标题】:Android - Two spinners in one Activity - Saving Data is not workingAndroid - 一个活动中有两个微调器 - 保存数据不起作用
【发布时间】:2017-08-18 17:47:10
【问题描述】:

我的问题如下。我在一项活动中有 2 个 Spinners。我希望两个微调器项目都应该保存在数据库中。但是两个微调器之间存在细微差别:

  • 微调器 1:由其他数据库表中的数据填充 - 当它是上述活动中唯一的微调器时,它可以工作。
  • 微调器 2:具有默认值。我不确定是否将其正确添加到我的活动中。无论如何,在我将它添加到我的保存后,数据不再起作用了。

请帮我看看我做错了什么?

我的活动代码:

public class activity_transport extends AppCompatActivity {

    private BottomNavigationViewEx bottomNavigationViewEx;
    DatabaseHelper myDb;
    Button btn_save;
    Spinner ChooseProject,ChooseTransport;
    EditText Entfernung,Price,MWST;
    String selectedspinner, selectedTransport;

    ImageView imageView2;
    private static int PICK_IMAGE = 100;
    Uri imageUri;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transport);
        myDb = new DatabaseHelper(this);

        ChooseProject = (Spinner) findViewById(R.id.ChooseProject);
        ChooseTransport = (Spinner) findViewById(R.id.ChooseTransport);
        Entfernung = (EditText) findViewById(R.id.Entfernung);
        Price = (EditText) findViewById(R.id.Preis);
        MWST = (EditText) findViewById(R.id.MwSt);
        btn_save=(Button) findViewById(R.id.btn_save);
        //bildanzeigebereich im layout
        imageView2=(ImageView) findViewById(R.id.imageView2);
        loadProjectSpinnerData();
        //loadTransportSpinnerData();
        SaveData();

    //+++++++++++++++Function to load the spinner data from SQLite database++++++++++//

    private void loadProjectSpinnerData() {
        // database handler
        DatabaseHelper db = new DatabaseHelper (getApplicationContext());

        // Spinner Drop down elements
        List<String> projects = db.getAllProjects();

        // Creating adapter for spinner
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, projects);

        // Drop down layout style - list view with radio button
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ChooseProject.setPrompt("Projekt auswählen");

        // attaching data adapter to spinner
        ChooseProject.setAdapter(dataAdapter);



        //Choose Transport Spinner
        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, new String[] {
                new String("Auto"),
                new String("Flugzeug"),
                new String("Taxi"),
                new String("Bahn")});
        ChooseTransport.setAdapter(spinnerArrayAdapter);

        // Drop down layout style - list view with radio button
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ChooseTransport.setPrompt("Transport auswählen");

        // attaching data adapter to spinner
        ChooseTransport.setAdapter(spinnerArrayAdapter);


        //Listener für den Projekt Spinner damit ich den Wert abspeichern kann
        ChooseProject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                Spinner spinner = (Spinner) parent;
                if(spinner.getId() == R.id.ChooseProject)
                {
                    selectedspinner = (String) ChooseProject.getSelectedItem();
                }
                else if(spinner.getId() == R.id.ChooseTransport)
                {
                    selectedTransport = (String) ChooseTransport.getSelectedItem();
                }
                //selectedspinner =String.ValueOf(parent.getItemAtPosition(pos));

            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

    }






    /*private void loadTransportSpinnerData() {
        // Spinner method to read the on selected value
        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, new String[] {
                new String("Auto"),
                new String("Flugzeug"),
                new String("Taxi"),
                new String("Bahn")});
        ChooseTransport.setAdapter(spinnerArrayAdapter);


        // Creating adapter for spinner
        //ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, projects);

        // Drop down layout style - list view with radio button
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ChooseTransport.setPrompt("Transport auswählen");

        // attaching data adapter to spinner
        ChooseTransport.setAdapter(spinnerArrayAdapter);

        //Listener für den Projekt Spinner damit ich den Wert abspeichern kann
        ChooseTransport.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                //selectedspinner =String.ValueOf(parent.getItemAtPosition(pos));
                selectedTransport = (String) ChooseTransport.getSelectedItem();
            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

    }*/



    //++++++++++++Save Data++++++//
    public void SaveData(){
        btn_save.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        boolean isInserted = myDb.createTransport(
                                selectedspinner,
                                selectedTransport,
                                Integer.valueOf(Price.getText().toString()),
                                Integer.valueOf(MWST.getText().toString()),
                                Integer.valueOf(Entfernung.getText().toString()),
                                imageViewToByte(imageView2)
                        );
                        if(isInserted=true)
                            Toast.makeText(activity_transport.this, "Daten gespeichert", Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(activity_transport.this, "Daten nicht gespeichert", Toast.LENGTH_LONG).show();

                    }
                }
        );
    }


}

编辑:

我尝试通过设置几个断点来运行应用程序。 尝试运行此行时selectedTransport = (String) ChooseTransport.getSelectedItem(); 调试器发布Cannot find local variable 'ChooseTransport'

【问题讨论】:

  • “保存数据不再起作用”是什么意思?你有什么问题?
  • 将数据保存在我的数据库中不起作用..我的问题是通过实现微调器 2 我在做什么?
  • 在我的代码微调器 2 中是 ChooseTransport
  • 您提供了大量的代码转储,几乎没有或根本没有解释。您是否尝试过使用断点单步执行活动以查看发生了什么?如果您的代码损坏了,那么它的损坏是有原因的,应该向我们提供有关问题的提示,反之亦然。
  • 我没有尝试通过代码设置断点。我的假设是第二个微调器 ChooseTransport 无法正常工作,因为我有两次相同的类,只有提到的微调器使用相同的代码不见了。

标签: android sqlite spinner


【解决方案1】:

我解决了这个问题:

我为ChooseTransport- Spinner 实现了一个自己的方法,现在它可以工作了。我还发现我将数据添加到数据库的顺序不正确。我也改了。

在这里查看我的第二个微调器的方法:

private void loadTransportSpinnerData(){


        ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.transport, android.R.layout.simple_spinner_dropdown_item);
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ChooseTransport.setPrompt("Transport auswählen");
        ChooseTransport.setAdapter(spinnerArrayAdapter);

        ChooseTransport.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                selectedTransport = (String) ChooseTransport.getSelectedItem();
            }

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

            }
        });

    }

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多