似乎无法获取SQL数据库来正确设置Spinner

时间:2013-10-30 03:14:03

标签: android sql database spinner

问题完全如描述。我使用SQL数据库来保存两个字符串和一个int。 int是微调器的位置。它似乎保存和更新就好了但当我返回页面查看它时,它会重置微调器。我知道它正在保存正确的位置,因为我的listview显示了保存的位置。

{*旁注(可能不重要)有趣的是,更改一个特定的代码行会改变微调器重置的内容。如果我使用方法

     trket.setSelection(codeIndex);

它将微调器设置在位置3

但是,如果我使用代码

trket.setId(codeIndex);

它将微调器设置在位置0}

现在我的代码。

第一堂课是查看/编辑/保存/删除条目的地方 还有很多额外的代码。抱歉。它尽可能地融入其中。

public class TestEdit extends Activity implements OnClickListener,OnItemSelectedListener{

 private long rowID; 
 private EditText caret,lapet;
 private Spinner trket;
 String a,b,c,message,pps,tys,rh1s,rh2s,sr1s,sr2s,de1s,de2s,dc1s,dc2s,ar1s,ar2s,c1s,c2s,t1s,t2s,bb1s,bb2s,li1s,li2s,la1s,la2s,lb1s,lb2s,df1s,df2s,g1s,g2s,g3s,g4s,g5s,g6s,g7s,gfs,tss,hps,tqs,lbs,mils,rpms,partss,commentss;
 String[] paths = { "six","five", "four", "three", "two", "one"};
 Button paste,sa,sh,cb;
 int position;


   @Override
   public void onCreate(Bundle savedInstanceState) 


   {
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.test_tunepage);
      caret = (EditText) findViewById(R.id.editText1);
      lapet = (EditText) findViewById(R.id.editText2);
      trket = (Spinner) findViewById(R.id.spinner1);


       sa = (Button)findViewById(R.id.delete);

        sa.setOnClickListener(this);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, paths
                );
        trket.setAdapter(adapter);
        trket.setOnItemSelectedListener(this);





       Bundle extras = getIntent().getExtras(); 


              if (extras != null)
      {
         rowID = extras.getLong("row_id");
         caret.setText(extras.getString("car"));  
         lapet.setText(extras.getString("lap"));  
         trket.setSelection(position);


         }

      Button saveButton =(Button) findViewById(R.id.save);
      saveButton.setOnClickListener(new OnClickListener() {

          @Override
        public void onClick(View v) 
          {
              if (caret.getText().length() != 0)
                 {
                    AsyncTask<Object, Object, Object> saveContactTask = 
                       new AsyncTask<Object, Object, Object>() 
                       {
                          @Override
                          protected Object doInBackground(Object... params) 
                          {
                             saveContact();
                             return null;
                          }

                          @Override
                          protected void onPostExecute(Object result) 
                          {
                             finish();
                          }
                       }; 

                    saveContactTask.execute((Object[]) null); 
                 }

                 else
                 {
                    AlertDialog.Builder alert = new AlertDialog.Builder(TestEdit.this);
                    alert.setTitle(R.string.errorTitle); 
                    alert.setMessage(R.string.errorMessage);
                    alert.setPositiveButton(R.string.errorButton, null); 
                    alert.show();
                 }
              } 
         });
       }
   private void deleteContact()
   {

      AlertDialog.Builder alertt = new AlertDialog.Builder(TestEdit.this);

      alertt.setTitle(R.string.confirmTitle); 
      alertt.setMessage(R.string.confirmMessage); 

      alertt.setPositiveButton(R.string.delete_btn,
         new DialogInterface.OnClickListener()
         {
            @Override
            public void onClick(DialogInterface dialog, int button)
            {
               final TestDbCon dbConnector = 
                  new TestDbCon(TestEdit.this);

               AsyncTask<Long, Object, Object> deleteTask =
                  new AsyncTask<Long, Object, Object>()
                  {
                     @Override
                     protected Object doInBackground(Long... params)
                     {
                        dbConnector.deleteContact(params[0]); 
                        return null;
                     } 

                     @Override
                     protected void onPostExecute(Object result)
                     {
                        finish(); 
                     }
                  };

               deleteTask.execute(new Long[] { rowID });               
            }
         }
      );
      alertt.setNegativeButton(R.string.cancel_btn, null).show();

   }

   @Override
   protected void onResume()
   {
      super.onResume();
      new LoadContacts().execute(rowID);
   } 

   private class LoadContacts extends AsyncTask<Long, Object, Cursor> 
   {
      TestDbCon dbConnector = new TestDbCon(TestEdit.this);

      @Override
      protected Cursor doInBackground(Long... params)
      {
         try {
            dbConnector.open();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         return dbConnector.getOneContact(params[0]);
      } 

      @Override
      protected void onPostExecute(Cursor result)
      {
         super.onPostExecute(result);
         if (result != null && result.moveToFirst()) {

         // get the column index for each data item
         int nameIndex = result.getColumnIndex("car");
         int capIndex = result.getColumnIndex("lap");
         int codeIndex = result.getColumnIndex("trk");




         lapet.setText(result.getString(capIndex));
         //trket.setId(codeIndex);
         trket.setSelection(codeIndex);

         caret.setText(result.getString(nameIndex));
         }

         result.close();
         dbConnector.close();
      }
   } 

    private void saveContact() 
       {
          TestDbCon dbConnector = new TestDbCon(this);

          if (getIntent().getExtras() == null)
          {
              dbConnector.insertContact(
                      caret.getText().toString(),//1
                      lapet.getText().toString(),
                      trket.getLastVisiblePosition());

          }
          else
          {
             dbConnector.updateContact(rowID,
                caret.getText().toString(),
                lapet.getText().toString(), 
                trket.getLastVisiblePosition());

   }


   }

    @Override
    public void onClick(View v) {
        switch(v.getId()){

         case R.id.delete:
                deleteContact();
                break;}


          }



    private void getstrings() {
        // TODO Auto-generated method stub
        a=caret.getText().toString();
        b=lapet.getText().toString();

    }
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        position = trket.getSelectedItemPosition();

    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

}

我确实认为这是唯一一个重要的课程,但如果您想看到别的东西,请告诉我。我会一直在这里回来看看。

谢谢!

2 个答案:

答案 0 :(得分:1)

saveContact方法

替换

trket.getLastVisiblePosition());

trket.getSelectedItemPosition();

答案 1 :(得分:0)

感谢来自Google+的Rob Myers帮我弄清楚我没有得到结果并正确设置了int。我在重新进入我正在调用的活动时将字段设置为

 trket.setSelection(codeIndex);

当我需要打电话时

 trket.setSelection(result.getInt(codeIndex));