Android光标仅显示数组的第一项
我找不到为什么我的列表没有打印所有项目,它只打印第一个项目,我检查了我的数据库,那里有三个项目,但我的日志是这样说的:Android光标仅显示数组的第一项,android,cursor,android-arrayadapter,android-cursor,Android,Cursor,Android Arrayadapter,Android Cursor,我找不到为什么我的列表没有打印所有项目,它只打印第一个项目,我检查了我的数据库,那里有三个项目,但我的日志是这样说的: 10-03 14:46:07.116 833-833/br.com. I/System.out﹕ Q2: SELECT * FROM enderecos WHERE enderecos_id = 3 10-03 14:46:07.117 833-833/br.com. I/System.out﹕ END: Rua ujhuo 10-03 14:46:07.1
10-03 14:46:07.116 833-833/br.com. I/System.out﹕ Q2: SELECT * FROM enderecos WHERE enderecos_id = 3
10-03 14:46:07.117 833-833/br.com. I/System.out﹕ END: Rua ujhuo
10-03 14:46:07.124 833-833/br.com. I/System.out﹕ Q2: SELECT * FROM telefones WHERE telefones_id = 5
10-03 14:46:07.125 833-833/br.com. I/System.out﹕ LIsta De TELEFone [br.com.database.models.TelefoneModel@422e8d58]
TelefoneModel@422e8d58-这是第一个,其他的没有显示
功能:
public List<TelefoneModel> getTelefonesDoCliente(Integer clientes_id) throws SQLException {
String query1 = "SELECT * FROM " + tabelaCLIENTES_HAS_TELEFONES + " WHERE " + ClienteHasTelefoneModel.Coluna.CLIENTES_ID + " = " + clientes_id;
Cursor mCursor1 = bd.rawQuery(query1, null);
List<TelefoneModel> listaDeRegistros = new ArrayList<TelefoneModel>();
if (mCursor1.getCount() > 0) {
if (mCursor1.moveToFirst()) {
do {
Integer TelefoneId = mCursor1.getInt(mCursor1.getColumnIndexOrThrow("telefones_id"));
String query = "SELECT * FROM " + tabelaTELEFONES + " WHERE " + TelefoneModel.Coluna.TELEFONES_ID + " = " + TelefoneId;
System.out.println("Q2: " + query);
Cursor mCursor2 = bd.rawQuery(query, null);
try {
if (mCursor2.getCount() > 0) {
if (mCursor2.moveToFirst()) {
do {
TelefoneModel mTelefoneModel = new TelefoneModel();
mTelefoneModel.setTelefones_id(mCursor2.getInt(mCursor2.getColumnIndex(TelefoneModel.Coluna.TELEFONES_ID)));
mTelefoneModel.setId_rm(mCursor2.getInt(mCursor2.getColumnIndex(TelefoneModel.Coluna.ID_RM)));
mTelefoneModel.setNumero(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.NUMERO)));
mTelefoneModel.setTipo(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.TIPO)));
mTelefoneModel.set_criado(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna._CRIADO)));
mTelefoneModel.set_modificado(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna._MODIFICADO)));
mTelefoneModel.set_status(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna._STATUS)));
listaDeRegistros.add(mTelefoneModel);
System.out.println("TELEFONES AQUI " + mTelefoneModel);
} while (mCursor2.moveToNext());
}
}
return listaDeRegistros;
} catch (Exception e) {
e.printStackTrace();
}
}while (mCursor1.moveToNext());
}
}
return null;
}
public List getTelefonesDoCliente(整数客户机\u id)抛出SQLException{
字符串query1=“SELECT*FROM”+tabelaCLIENTES\u HAS\u TELEFONES+“其中”+clienthestlefonemodel.Coluna.CLIENTES\u ID+“=”+clients\u ID;
游标mCursor1=bd.rawQuery(query1,null);
List listaDeRegistros=new ArrayList();
如果(mCursor1.getCount()>0){
if(mCursor1.moveToFirst()){
做{
整数TelefoneId=mCursor1.getInt(mCursor1.getColumnIndexOrThrow(“telefones_id”);
String query=“SELECT*FROM”+tabelaTELEFONES+,其中“+TelefoneModel.Coluna.TELEFONES_ID+”=“+TelefoneId;
System.out.println(“Q2:+查询”);
游标mCursor2=bd.rawQuery(查询,空);
试一试{
如果(mCursor2.getCount()>0){
if(mCursor2.moveToFirst()){
做{
TelefoneModel mTelefoneModel=新TelefoneModel();
mTelefoneModel.setTelefones_id(mCursor2.getInt(mCursor2.getColumnIndex(TelefoneModel.Coluna.TELEFONES_id));
mTelefoneModel.setId_rm(mCursor2.getInt(mCursor2.getColumnIndex(TelefoneModel.Coluna.ID_rm));
mTelefoneModel.setNumero(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.NUMERO));
mTelefoneModel.setTipo(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.TIPO));
mTelefoneModel.set_criado(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.u criado));
mTelefoneModel.set_modificado(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.u modificado));
mTelefoneModel.set_status(mCursor2.getString(mCursor2.getColumnIndex(TelefoneModel.Coluna.u status));
添加(mTelefoneModel);
System.out.println(“TELEFONES AQUI”+mTelefoneModel);
}while(mCursor2.moveToNext());
}
}
返回ListaderRegistros;
}捕获(例外e){
e、 printStackTrace();
}
}while(mCursor1.moveToNext());
}
}
返回null;
}
适配器:
公共类TelefoneViewAdapter扩展BaseAdapter{
private ClienteDetalheActivity detalhe;
private List<TelefoneModel> tele;
private static LayoutInflater inflater=null;
public TelefoneViewAdapter(Context context, ClienteDetalheActivity clienteDetalhe, List<TelefoneModel> telefone) {
this.inflater = LayoutInflater.from( context );
this.tele = telefone;
detalhe = clienteDetalhe;
}
public int getCount() {
return tele.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView == null){
vi = inflater.inflate(R.layout.fragment_cliente_detalhe, null);
holder=new ViewHolder();
holder.id = (TextView)vi.findViewById(R.id.enderecoId);
holder.numero = (TextView)vi.findViewById(R.id.telefone);
vi.setTag(holder);
}else{
holder = (ViewHolder)vi.getTag();
}
TelefoneModel item = new TelefoneModel();
item = tele.get(position);
holder.id.setText(String.valueOf(item.getTelefones_id()));
holder.numero.setText(item.getNumero());
return vi;
}
public class ViewHolder
{
TextView id;
TextView numero;
}
私人客户活动详情;
私人名单电话;
专用静态充气机=空;
公共电话设备适配器(上下文上下文、客户活动客户活动、列表电话设备){
this.inflater=layoutiner.from(上下文);
this.tele=telefone;
detalhe=客户detalhe;
}
public int getCount(){
返回tele.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
视窗座;
if(convertView==null){
vi=充气机。充气(R.layout.fragment\u cliente\u detalhe,空);
holder=新的ViewHolder();
holder.id=(TextView)vi.findViewById(R.id.enderecoId);
holder.numero=(TextView)vi.findViewById(R.id.telefone);
vi.setTag(支架);
}否则{
holder=(ViewHolder)vi.getTag();
}
TelefoneModel项=新的TelefoneModel();
项目=远程获取(位置);
holder.id.setText(String.valueOf(item.getTelefones_id());
holder.numero.setText(item.getNumero());
返回vi;
}
公共类视图持有者
{
文本视图id;
文本视图编号;
}
}您正在打印一个包含多个对象的对象 据我所见,你正试图打印一份电话列表。但是请记住,您不能只打印
list.toString()
,因为这样只会打印一项。清单本身。如果你想打印所有的手机,你必须迭代列表并逐个打印它的容器。您可以通过对每个
for(TelefoneModel phone : listaDeRegistros)
System.out.println("Phone " + phone);
替换此行的System.out.println
,它将迭代列表中的所有电话并打印它们
编辑
还要记住,您的代码只使用了
mCursor1
的第一个元素。如果此操作返回多个对象,并且您也希望为该光标获取手机,则必须对该光标执行do/while
,就像对手机执行的操作一样。否则,您的代码如下->"获取id=3的所有地址->获取地址中第一个项目id的所有电话。你能显示打印的代码吗?@CChi我已经编辑了这个问题,你能把日志放到while循环中,看看是否循环了不止一次。我真的看不到你循环列表并逐个打印项目的代码一个是电话列表。不仅仅是“一个”电话“谢谢你的帮助佩德罗,我也照你说的做了,结果还是一样的,看:10-03 16:02:46.229 15894-15894/br.com.I/System.out﹕ 电话br.com.database.models。TelefoneModel@422e42b8
好的,佩德罗,我已经在mCursor1中添加了do/while
,但结果仍然相同……从do/while
中删除列表中的ListaderRegistros=new ArrayList();
,然后将其放在外部。否则,您将无法使用它