0

I have two Spinners in Activity A and they hold these items:
{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110","PRO-SIE-BIOCON","PRO-BCM-T13/T17"}.

Assume that in Spinner1, I select value SRV, and in Spinner2 I select TRN. Finally I save the selected value into SQLite.

In Activity B, I want to retrieve the item out and display on SpinnerA and B. Note that Spinner A and B have the same items as the Spinners in Activity A.

Activity B

public class B extends Fragment {

    SQLiteDatabase database;
    MyDatabaseHelper dbHelper;
    Cursor c;
    Spinner weather3,status3,project1,project2,project3,project4;
    EditText name3;
    EditText date3;
    String date;
    String ID;
    String Project11;
    String Project22;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.u, container, false);
        dbHelper = new MyDatabaseHelper(getActivity());
        project1 = (Spinner) view.findViewById(R.id.spinner8);
        project2 = (Spinner) view.findViewById(R.id.spinner9);
        name3 = (EditText)view. findViewById(R.id.editText9);
        date3 = (EditText)view. findViewById(R.id.editText12);
        Bundle bundle=this.getArguments();
        if(getArguments()!=null)
        {
            date=bundle.getString("date1");
            ID = bundle.getString("ID");
        }
        Log.e("TAG",date);
        Log.e("TAG",ID);
         RetrievePage(date, ID);
         return view;
    }



    public void addProject1(String l)
    {

        String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
                "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
                "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
        List<String> list = new ArrayList<String>();
        String project11 = l;
        list.add(project11);
        for(String s:arr){
            if(!list.contains(s)){
                list.add(s);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        project1.setAdapter(adapter);
    }

    public void addProject2(String d)
    {

        String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
                "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
                "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
        List<String> list = new ArrayList<String>();
        String project22 = d;
        list.add(project22);
        for(String s:arr){
            if(!list.contains(s)){
                list.add(s);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        project2.setAdapter(adapter);
    }

       public void RetrievePage(String date, String id) {
        final String date2=date;
        final String id2 = id;


        database = dbHelper.getWritableDatabase();
        c = database.rawQuery("SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson, w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per, wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i._id LEFT JOIN WorkDetails wd ON wd.Twf_id=w._id WHERE i.Name = ? AND i._id= ? ",
                new String[]{String.valueOf("Lim Chun Yao"),String.valueOf(id2)}, null);
        if (c != null) {
            while (c.moveToNext()) {

                Details WD = new Details();

                 Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                 Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));

                addProject1(Project11);
                addProject2(Project22);
                WD.setProject(Project11);
                WD.setProject(Project22);
            }
            Log.e("TAG1",Project11);
            Log.e("TAG2",Project22);
            c.close();
          }
    }
}

The value inserted into SQLite is correct, but the value displayed on Spinner A is incorrect.

The Log displays

11-23 16:46:29.517  29621-29621/? E/TAG1﹕ TRN-XXX-XXX
11-23 16:46:29.517  29621-29621/? E/TAG2﹕ TRN-XXX-XXX

and the Spinner A and B display TRN as well.
But Spinner A should display SRV instead of TRN.

I know there is a method called setSelection(), but how can it applied to my case?

Edited

 public void RetrievePage(String date, String id) {
        final String date2 = date;
        final String id2 = id;


        database = dbHelper.getWritableDatabase();
        c = database.rawQuery("SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson, w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per, wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i._id LEFT JOIN WorkDetails wd ON wd.Twf_id=w._id WHERE i.Name = ? AND i._id= ? ",
                new String[]{String.valueOf("Lim Chun Yao"), String.valueOf(id2)}, null);
        int rowNum = 1;
        if (c != null) {
            while (c.moveToNext()) {
                Details WD = new Details();

                switch (rowNum) {
                    case 1:
                        Project11 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject1(Project11);
                        WD.setProject(Project11);
                        break;

                    case 2:
                        Project22 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject2(Project22);
                        WD.setProject(Project22);
                        break;

                    case 3:
                        Project33 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject3(Project33);
                        WD.setProject(Project33);
                        break;

                    case 4:
                        Project44 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject4(Project44);
                        WD.setProject(Project44);
                        break;


                }
                rowNum += 1;
            }
            c.close();
            Log.e("TAG1", Project11);
            Log.e("TAG2", Project22);

        }

    }
}

Now the spinner already can display the value inserted to the first. But how to make the spinner display Pro-XXX-XXX if no value inserted in the spinner Activity A ?

Tony
  • 2,515
  • 14
  • 38
  • 71
  • You could catch the value from database, and build a method that search your array for the value, grab the index in the array, and use spinner method to set his index. This could help you: http://stackoverflow.com/questions/2390102/how-to-set-selected-item-of-spinner-by-value-not-by-position – Fustigador Nov 23 '15 at 17:19

1 Answers1

2

Why do you get the same field for different variables?

Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));

For reading two rows in your case instead of the while loop:

Details WD = new Details();

//read the first row
c.moveToNext();
Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
addProject1(Project11);
WD.setProject(Project11); // dont know what does this method do

//read the second row
c.moveToNext();
Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
addProject2(Project22);
WD.setProject(Project22);

c.close();

Log.e("TAG1",Project11);
Log.e("TAG2",Project22);

while loop:

    int rowNum=1;
    while(c.moveToNext()) {

        switch (rowNum) {
            case 1:
                //handle first row
                Project11 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                addProject1(Project11);
                WD.setProject(Project11); // dont know what does this method do
                break;

            case 2:
                //handle second row
                Project22 = c.getString.........
                break;
            case 3:
                //handle third
                break;
        //  etc....
        }

        rowNum+=1;
    }

If no selection was made in Activity A, then you should insert something that indicating no value selected, for example an empty string(""). Then, if this can happen with the 3rd spinner, your code can be changed to this:

 case 3:
                        Project33 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
            if(project33.equals("")) // detect if no selection made
            {
                            addProject3("Pro-XXX-XXX"); // set value
                            WD.setProject("Pro-XXX-XXX");
            }
            else
            {
                            addProject3(Project33);
                            WD.setProject(Project33);
            }
                        break;

Also, i've checked your addProjectX methods, i would change them this way:

public void addProject1(String l)
{

    String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
            "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
            "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
    List<String> list = new ArrayList<String>();

    list.addAll(Arrays.asList(arr)); // add all of the arr elements to the list

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    project1.setAdapter(adapter);

    project1.setSelection(list.indexOf("l")); // get the index of the l string in the arr, then select that index in the spinner
}
csenga
  • 3,819
  • 1
  • 21
  • 31
  • Because I need to insert these two values into two row but same column – Tony Nov 23 '15 at 17:21
  • You must call moveToNext() to get the next row. Now you read these values from the same row. – csenga Nov 23 '15 at 17:26
  • I'm sure the error is from this line. How to call moveToNext – Tony Nov 23 '15 at 17:29
  • instead of the while loop: Details WD = new Details(); //read the first row c.moveToNext(); Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); addProject1(Project11); WD.setProject(Project11); // dont know what does this method do //read the second row c.moveToNext(); Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); addProject2(Project22); WD.setProject(Project22); c.close(); Log.e("TAG1",Project11); Log.e("TAG2",Project22); – csenga Nov 23 '15 at 17:35
  • If I have 4 rows,I need to write 4 times for the moveNext? – Tony Nov 23 '15 at 17:46
  • It depends on you. You can use while loop to, check my edit. – csenga Nov 23 '15 at 17:56
  • Do i still need to put while (c.moveToNext()) afrer if c! =null? – Tony Nov 23 '15 at 18:16
  • This also depends on you. If you choose my first example, you don't need it. If you want use the second one, the while loop is already contained in it. – csenga Nov 23 '15 at 18:27
  • here ? Thanks for your answer. Can you see my edited post again ? – Tony Nov 24 '15 at 03:06
  • check my modification – csenga Nov 24 '15 at 09:32