Pegar texto do spinner [RESOLVIDO]

10 respostas
M

Ola a todos, tenho uma aplicação que busca todos os contatos que tenho e me retorna o nome em um spinner, e agora preciso pegar este nome que esta no spinner e não esta funcionando.

Codigo pra retornar os contatos…

public void pegaContatos(){
			String[] PROJECTION = new String[] {
		        People._ID, People.NAME
		    };

		    Uri contacts =  People.CONTENT_URI;
		    Spinner contactsSpinner = (Spinner) findViewById(R.id.sp_cliente);

		    Cursor contactsCursor = managedQuery(contacts,
		                             PROJECTION, // Which columns to return 
		                             null,       // Which rows to return (all rows)
		                             null,       // Selection arguments (none)
		                             // Put the results in ascending order by name
		                             People.NAME + " ASC");

		    SimpleCursorAdapter sca = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item,contactsCursor, new String[] {People.NAME}, new int[] {android.R.id.text1} );
		    sca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		    contactsSpinner.setAdapter(sca);
	   }

Codigo para tentar pegar o nome que esta no spinner(sp_cliente)

spcliente = (Spinner) findViewById(R.id.sp_cliente);
	     	spcliente.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
	     	    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
	    			String nsvNome = spcliente.getSelectedItem().toString();
	     	    	Log.w("Cliente",nsvNome);
	     	    } 
	     	    public void onNothingSelected(AdapterView<?> adapterView) {
	     	        return;
	     	    } 
	     	});

No log aparece isto em vez do nome do contato…

01-03 17:23:32.069: W/Cliente(4271): android.content.ContentResolver$CursorWrapperInner@40539528

10 Respostas

F

O primeiro int do metodo onItemSelected é a posição do item clicado,
esta posição é a mesma do contato gravado na Adapterlist usado na spinner.

creio que um sca.getItem(i) dentro do onItemSelected resolva

M

fabriciov:
O primeiro int do metodo onItemSelected é a posição do item clicado,
esta posição é a mesma do contato gravado na Adapterlist usado na spinner.

creio que um sca.getItem(i) dentro do onItemSelected resolva

Erro:
sca cannot be resolved

F

declare na classe:

M

[quote=fabriciov]declare na classe:

Declarei a classe, mas01-04 10:34:08.779: E/AndroidRuntime(8082): FATAL EXCEPTION: main

01-04 10:34:08.779: E/AndroidRuntime(8082): java.lang.NullPointerException

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at personal.tech.Atendimento$1.onItemSelected(Atendimento.java:70)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.widget.AdapterView.fireOnSelected(AdapterView.java:871)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.widget.AdapterView.access$200(AdapterView.java:42)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.os.Handler.handleCallback(Handler.java:587)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.os.Handler.dispatchMessage(Handler.java:92)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.os.Looper.loop(Looper.java:130)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at android.app.ActivityThread.main(ActivityThread.java:3835)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at java.lang.reflect.Method.invokeNative(Native Method)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at java.lang.reflect.Method.invoke(Method.java:507)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)

01-04 10:34:08.779: E/AndroidRuntime(8082): 	at dalvik.system.NativeStart.main(Native Method)
M

fabriciov, se tiver skype add ae:

marcianovc

F

Estou no trabalho, não tem skype aqui.

Estava pesquisando e por surpresa achei o exemplo que provavelmente você se baseou ( http://stackoverflow.com/questions/4070313/android-displaying-contact-names-in-a-spinner ),
há um comentário logo abaixo : Isso não é suportado em SDK 2.0+
e duvido que esteja trabalhando com versão inferior ao Ecclair ;p

Uma opção é fazer uma arraylist igual dos contatos e trabalhar sobre ela
aqui tem um exemplo de como fazer:
http://dev.schmid.pro/android/get-contacts-on-android-2-0

e não esqueça de adicionar a permissão no manifest, pelo menos eu sempre esqueço hehe

M

vo tenta aq , se der certo aviso ae blz…
obrigado por eqto…

M
marcianovc:
vo tenta aq , se der certo aviso ae blz... obrigado por eqto...

Consegui resolver, segue o codigo:

public void loadSpinnerClientes(){
		List<String> contatos = new ArrayList<String>();
		contatos.add("Novo");
    	try {
    		String[] PROJECTION = new String[] { Contacts._ID,
    		Contacts.DISPLAY_NAME, Phone.NUMBER };

    		Cursor c = managedQuery(Phone.CONTENT_URI, PROJECTION, null, null, null);
    		if (c.moveToFirst()) {
    		String clsPhonename = null;
    		String clsphoneNo = null;

    		do {
    		clsPhonename = c.getString(c.getColumnIndex(Contacts.DISPLAY_NAME));
    		clsphoneNo = c.getString(c.getColumnIndex(Phone.NUMBER));

    		clsphoneNo.replaceAll("\\D","");
    		clsPhonename = clsPhonename.replaceAll("&","");
    		clsPhonename.replace("|","");
    		String clsPhoneName = clsPhonename.replace("|", "");

    		System.out.println(clsPhoneName);
    		contatos.add(clsPhoneName);

    		} while (c.moveToNext());
    		}
    		} catch (Exception e) {
    		e.printStackTrace();
    		}
    	
    	// Creating adapter for spinner
    	ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, contatos);

    	// Drop down layout style - list view with radio button
    	dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    	// attaching data adapter to spinner
    	spcliente.setAdapter(dataAdapter);
    }
E para pegar o texto que estiver selecionado no spinner:
String vname = spcliente.getSelectedItem().toString();

Resolvidooooo....

F

Poderia me ajudar, estou com dúvidas para utilizar o spinner.

F

Está mostrando assim: Preciso também que mostre o id do item que está no banco de dados, era pra mostrar 1 no id e está mostrando 0 e no nome o que está abaixo:

06-30 16:45:40.636: I/Nome selecionado no spinner(407): Nome: android.database.sqlite.SQLiteCursor@44f72570

final Spinner spn = (Spinner) findViewById(R.id.spinner1);
		
    	String nomeString = Procurar.getText().toString();
    	Cursor cursor;	
		db.open();
	    cursor = db.getClientePorNome(nomeString);
	    cursor.moveToFirst();
	    
        SimpleCursorAdapter adaptador = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, 
                new String[] { DbAdapter.KEY_NOME }, 
                new int[] { android.R.id.text1 });             
        
        
        
        adaptador.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
       
        spn.setAdapter(adaptador);

        
        spn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View v, int posicao, long ids) {
				int index = parent.getSelectedItemPosition();
				final String vnome = parent.getSelectedItem().toString();  
				Log.i("Clicou no spinner", "Item: " +index);
				Log.i("Nome selecionado no spinner", "Nome: " +vnome);
				Toast.makeText(Lista.this, "ID Selecionado: " + index, Toast.LENGTH_LONG).show();
				Toast.makeText(Lista.this, "Nome: " + vnome, Toast.LENGTH_LONG).show();
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
				
			}
		});
	    db.close();
 	}
Criado 3 de janeiro de 2013
Ultima resposta 30 de jun. de 2013
Respostas 10
Participantes 3