Ajuda SQLite e Android - Dúvida na lógica

Olá pessoal, tudo bem? estou desenvolvendo um app onde tenho que cadastrar uma pessoa direto no sqlite, e essa pessoa pode ter um endereço ou mais.
Então criei uma tabela usuarios e uma tabela enderecos, ambas no sqlite.
Para referenciar o usuario, na tabela endereco criei um campo integer user_id.
Legal,
Criei um DAO para salvar o usuario no banco(UsuarioDao) e um DAO para salvar o endereco(EnderecoDao)

meu cadastro de usuario esta em uma activity e, essa parte esta salvando normal no banco.
Agora quando vou para a próxima activity de salvar endereço é que estou entrando em parafusos aqui.

O campo id do usuario é auto increment.

Como eu vou passar o valor desse campo para salvar na tabela endereco?
segue código do meu DAO
deve ser coisa simples… mas sinceramente to apanhando D+++
valews

package br.com.tudaki.dbUtils;

import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.widget.Toast;
import br.com.tudaki.domain.Endereco;

public class EnderecoDao extends AbstractDao<Endereco> {

	private SQLiteDatabase dataBase;
	private DbHelper helper;

	public EnderecoDao(Context context) {
		helper = new DbHelper(context);
	}

	@SuppressWarnings("finally")
	@Override
	public boolean salvar(Endereco end) {
		boolean retorno = false;
		dataBase = helper.getWritableDatabase();

		ContentValues values = new ContentValues();

		try {
			values.put("cep", end.getCep());
			values.put("rua", end.getRua());
			values.put("numero", end.getNumero());
			values.put("complemento", end.getComplemento());
			values.put("bairro", end.getBairro());
			values.put("cidade", end.getCidade());

			// inserir no banco
			long resultado = dataBase.insert("enderecos", null, values);

			if (resultado > 0) {
				retorno = true;
			} else {
				retorno = false;
			}

		} catch (SQLiteException e) {
			e.printStackTrace();
		} finally {
			dataBase.close();
			return retorno;
		}

	}

Esse método insert retorna um long que é o ID do registro que foi inserido, certo? então, você poderia fazer tipo isso: ao inserir a pessoa, pegue esse id e dê um select na tabela de pessoas procurando pelo registro que tem esse id. Daí você pega o id da pessoa e passa para o método que vai inserir os endereços

legal, vou tentar aqui, e posto um feedback

Bom, somente para acrescentar, o método retorna o id do registro, ou retorna -1, se não foi possível efetuar a inserção, se você verificar, verá que quando existe uma chave primária em sua tabela, o retorno do método será o próprio valor retornado pelo método, não poderia então fazer algo do tipo:

[code]public long insert(String table, String[] fields, String[] vals )
{
String nullColumnHack = null;
ContentValues values = new ContentValues();
for (int i = 0; i < fields.length; i++)
{
values.put(fields[i], vals[i]);
}

return myDataBase.insert(table, nullColumnHack, values); 

}[/code]

fonte:

desta forma após inserir, você faz uma verificação se foi retornado -1, se não foi, então obteve sucesso, desta forma é so usar o valor de retorno, sem a necessidade de um novo select…

Se você não tiver um identificador, o número gerado será para uso interno do sql, em um coluna oculta…, nos meus testes apesar de serem coisas distintas indenticador da coluna(rowid) e chave primária, ele se comportou retornando o valor gerado para a chave primária.

Uma outra abordagem seria usar uma raw query com o seguinte comando:

SELECT * from SQLITE_SEQUENCE

Desta forma poderia pegar a ultima posição do cursor.

Quando li a documentação pensei que ele gerava um id interno sem nada a ver com a chave primária mas sendo desse jeito é melhor ainda!!

Então Ademilton, na realidade neste texto, fica meio difícil mesmo entender, veja:

Sem contar, que temos na verdade uma API no meio da caminho android.database.sqlite.SQLiteDatabase, encapsulando o sql…

mas levando em consideração que a api vai usar “sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);” como citado na documentação, podemos ver o trecho que diz:

Desta forma se a tabela tem uma chave primaria a coluna da mesma é um outro alias para rowid, ou seja, deixa de ser uma coluna não declarada e passa a fazer uma “ponte”, não sei se é o termo mais apropriado… para a coluna.

Pessoal deu certo (ou pelo menos nao deu erro)
tem alguma maneira de visualizar o banco de dados por fora?
pelo file explorer ou algo assim?
abraços