Selection & argument med en cursor

Diskussion i 'Frågor, support och diskussion' startad av }{ermanssoN, 15 jul 2011.

  1. }{ermanssoN

    }{ermanssoN Baby Droid Medlem

    Blev medlem:
    9 jun 2011
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej.

    Jag gör följande sökning:
    Kod:
    //id = testId
    String [] projection  = new String[]{Data.SYNC1};
    		String args[] = new String[]{ id };
    		String  selection  = Data.SYNC1 + "=?";
    		Uri uri = ContactsContract.RawContactsEntity.CONTENT_URI;
    		Cursor cursor = mResolver.query(uri, projection, selection,args, null);
    		try
    		{
    			cursor.moveToFirst();
                            //kommer att logga id: testID
    			Log.v(LOG_TAG, "id : "+ cursor.getString(0));
    			
    		}
    		catch( Exception e)
    		{
    			Log.e(LOG_TAG,e.getMessage());
    		}
    
    
    Detta funkar som det skall.
    Men när jag hittat rätt id så vill jag använda annan information som ligger i SYNC2

    så här:
    Kod:
    String [] projection  = new String[]{Data.SYNC1,Data.SYNC1};
    		String args[] = new String[]{ id };
    		String  selection  = Data.SYNC1 + "=?";
    		Uri uri = ContactsContract.RawContactsEntity.CONTENT_URI;
    		Cursor cursor = mResolver.query(uri, projection, selection,args, null);
    		try
    		{
    			cursor.moveToFirst();
    			Log.v(LOG_TAG, "id : "+ cursor.getString(0));
    			Log.v(LOG_TAG, "sync2 value : "+ cursor.getString(1));
    			
    		}
    		catch( Exception e)
    		{
    			Log.e(LOG_TAG,e.getMessage());
    		}
    
    
    problemet är att cursor.getString(1) kommer att vara null p.g.a att jag har en selection och ett argument.
    Jag är inte så hemma på SQL och vet inte hur jag skall ändra min selection.
     
  2. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Selection tillsammans med dess argument filtrerar ut vilka rader i tabellen som ska returneras. Vilka kolumner som returneras bestämms av projection.

    I ditt andra exempel är projection SYNC1 och SYNC1 d,v,s SYNC1 två gånger och ingen SYNC2 som det borde vara.
     
  3. }{ermanssoN

    }{ermanssoN Baby Droid Medlem

    Blev medlem:
    9 jun 2011
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Sorry, det var ett skriv fel. När jag testade så stod det självklart SYNC2.
    dvs:
    Kod:
    String [] projection  = new String[]{Data.SYNC1,Data.SYNC2};
    		String args[] = new String[]{ id };
    		String  selection  = Data.SYNC1 + "=?";
    		Uri uri = ContactsContract.RawContactsEntity.CONTENT_URI;
    		Cursor cursor = mResolver.query(uri, projection, selection,args, null);
    		try
    		{
    			cursor.moveToFirst();
    			Log.v(LOG_TAG, "id : "+ cursor.getString(0));
    			Log.v(LOG_TAG, "sync2 value : "+ cursor.getString(1));
    			
    		}
    		catch( Exception e)
    		{
    			Log.e(LOG_TAG,e.getMessage());
    		}
    
    output blir:
    id : testId och sync2 value : null

    Jag gissar på att sync2 blir null då sync2 innehåller en helt annan sträng än den i sync1, så när den provar argumentet mot sync2 två så det inte att stämma och den blir null.
     
  4. }{ermanssoN

    }{ermanssoN Baby Droid Medlem

    Blev medlem:
    9 jun 2011
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag provade att använda DATA1 och DATA2, då funkade det perfekt.
    Tack i alla fall :)
     
  5. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Argumentet testas som sagt inte mot SYNC2. Blir SYNC2 NULL beror det helt enkelt på att det är NULL. Jag har aldrig använt kontakt-API:erna så jag vet inte vad SYNC1 och 2 är för något men antagligen finns det helt enkelt inget värde angivet för SYNC2 på den kontakt du provar med.