2016-04-06 4 views
2

Я делаю приложение реляционной базы данных для Android, которое отображает счет-фактуру на основе выбранного идентификатора, который я использовал для заполнения счетчика. Spinner заполняет правильно, но мне нужно получить целочисленное значение id (а не индекс счетчика) для параметра метода , который содержит SQL. Я пробовал использовать метод getSelectedItem, но это, похоже, не делает то, что мне нужно.Как получить значение int выбранного элемента в счетчике?

Вот код для блесны:

package com.example.dh0020348.inventory; 

import android.app.AlertDialog; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class ViewAllCustomers extends AppCompatActivity { 
DbHelper db; 
TextView id, name, email, address, city, state, zip, phone, invoiceID; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_all_customers); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    db = new DbHelper(this); 

    final Spinner spinner = (Spinner) findViewById(R.id.spinnerInvoiceID); 

    DbBackend dbBackend = new DbBackend(ViewAllCustomers.this); 
    String[] spinnerLists = dbBackend.getAllSpinnerContent(); 

    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(ViewAllCustomers.this,android.R.layout.simple_spinner_item, spinnerLists); 
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(spinnerAdapter); 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      double total; 
      Cursor res = db.viewInvoice(Integer.parseInt(String.valueOf(spinner.getSelectedItem()))); 
      if (res.getCount() == 0) { 
       // show message 
       showMessage("Error", "Nothing found"); 
       return; 
      } 
      StringBuffer buffer = new StringBuffer(); 

      buffer.append("Invoice ID: " + res.getString(0) + "\n"); 
      buffer.append("Date: " + res.getString(1) + "\n"); 
      buffer.append("Name: " + res.getString(2) + "\n"); 
      buffer.append("Street Address: " + res.getString(8) + "\n"); 
      buffer.append("City: " + res.getString(9) + "\n"); 
      buffer.append("State: " + res.getString(10) + "\n"); 
      buffer.append("Zip Code: " + res.getString(11) + "\n"); 
      buffer.append("Phone: " + res.getString(12) + "\n"); 
      buffer.append("Item: " + res.getString(4) + "\n"); 
      buffer.append("Size: " + res.getString(5) + "\n"); 
      buffer.append(String.format("Price Per Item: %.2f", Double.parseDouble(res.getString(7))) + "\n"); 
      buffer.append("Quantity: " + res.getString(6) + "\n"); 
      total = Double.parseDouble(res.getString(7)) * Double.parseDouble(res.getString(6)); 
      buffer.append(String.format("Total Price: %.2f", total)); 

      // show all data 
      showMessage("Data", buffer.toString()); 
     } 

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

     } 
    }); 

    id = (TextView) findViewById(R.id.lblCustomerID); 
    name = (TextView) findViewById(R.id.lblCustomerName); 
    email = (TextView) findViewById(R.id.lblCustomerEmail); 
    address = (TextView) findViewById(R.id.lblCustomerAddress); 
    city = (TextView) findViewById(R.id.lblCity); 
    state = (TextView) findViewById(R.id.lblState); 
    zip = (TextView) findViewById(R.id.lblZip); 
    phone = (TextView) findViewById(R.id.lblPhone); 
    invoiceID = (TextView) findViewById(R.id.lblInvoice); 

    ViewAllCustomers(); 
//  ViewCustomerInvoices(); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

} 

//display the StringBuffer message 
public void showMessage(String title, String Message){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setCancelable(true); 
    builder.setTitle(title); 
    builder.setMessage(Message); 
    builder.show(); 
} 

public void ViewAllCustomers(){ 

    Cursor res = db.viewAllCustomers(); 
    while (res.moveToNext()) { 
     id.setText("ID: " + res.getString(0)); 
     name.setText("Name: " + res.getString(1)); 
     email.setText("Email: " + res.getString(2)); 
     address.setText("Address: " + res.getString(3)); 
     city.setText("City: " + res.getString(4)); 
     state.setText("State: " + res.getString(5)); 
     zip.setText("Zip: " + res.getString(6)); 
     phone.setText("Phone: " + res.getString(7)); 
     invoiceID.setText("Invoice ID:"); 
    } 
} 
} 

А вот метод с запросом в моем DbHelper классе:

//view a single saved invoice 
public Cursor viewInvoice(int id){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor res = db.rawQuery("SELECT ord." + INVOICE_ID + ", " + INVOICE_DATE + ", " + C_CUSTOMER_NAME + ", cus." 
      + C_CUSTOMER_ID + ", inventory." + INVENTORY_ITEM + ", " + ORDERED_SIZE + ", " + ORDERED_QUANTITY + ", " 
      + INVENTORY_PRICE + ", " + C_STREET_ADDRESS + ", " + C_CITY + ", " + C_STATE + 
      ", " + C_ZIP + ", " + C_PHONE + 
      " FROM " + TABLE_INVOICE + " as inv INNER JOIN " + TABLE_CUSTOMER + " as cus " + 
      "ON inv." + C_CUSTOMER_ID + " = " + "cus." + C_CUSTOMER_ID + 
      " INNER JOIN " + TABLE_ORDERED + " as ord ON inv." + INVOICE_ID + " = " + "ord." + ORDERED_ID + 
      " INNER JOIN " + TABLE_INVENTORY + " as inventory " + 
      "ON ord." + INVENTORY_ID + " = " + " inventory." + INVENTORY_ID, null); 
    if(res != null) 
     res.moveToFirst(); 
    return res; 
} 
+0

Почему на Земле вы строите такой запрос ...? – Siyual

+0

Извините, что я должен был включить в свой отображаемый код. У меня много констант, которые я использую для создания таблиц. Эта бедная форма? –

ответ

2

ли вы попробовать spinner.getSelectedItem() ToString.();

Затем отбросьте его на любой объект, на котором вы его заполнили.

+0

Это работает, чтобы отобразить первый индекс счетчика, но не изменяется при выборе другого индекса. –

+0

Затем используйте параметр «position» из метода onItemSelected как индекс элемента из этого счетчика. – Beemo

+0

Извините, вы хотите использовать параметр position в качестве параметра метода getSelectedItem? потому что этот метод не принимает параметр. Или, возможно, я могу использовать метод getSelectedItemPosition и как-то вытащить значение оттуда? –

0

Используйте spinnerAdapter.getSelectedItemId(), он вернет выбранный вами текущий идентификатор товара или INVALID_ROW_ID (-9223372036854775808), если ничего не выбрано.

0

вы можете сделать это двумя способами,

1] с использованием позиции вертушка позиции,

int myNum = 0; 

    try { 
     myNum = Integer.parseInt(Spinner_NAME.get(position).toString()); 
    } catch(NumberFormatException nfe) { 
     Log.e("","Exception :: "+nfe); 
    } 

2] Если вы используете какой-либо класс модели или любой ArrayList то,

int myNum = Integer.parseInt(spinner1.getModel().getValue().toString()); 
Смежные вопросы