无法使用simplecursoradapter创建图像

时间:2012-01-05 12:50:25

标签: android

我很容易使用textview但textview与imageview像联系人名称,数字和图像显示排序列表我痛苦与我搜索了许多博客但没有成功请帮助....

public class Listmain extends ListActivity
{ 
    @Override public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        try 
        { 
            Data_baseActivity db=new Data_baseActivity(this); 
            db.open(); 
            InputStream is; 
            Cursor cursor =db.getAllContacts1(); 
            int len=cursor.getCount(); 
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.rowlayout, cursor, new String[] { "image", "name"}, new int[] { R.id.icon, R.id.label}); 
            adapter.setViewBinder(new ProductViewBinder()); 
            setListAdapter(adapter); 
            db.close(); 
         } 
         catch(Exception e) 
         { 
            Toast.makeText(this, e.toString()+" error", Toast.LENGTH_LONG).show(); 
         }
    }
}



public class ProductViewBinder implements ViewBinder 
{
    public boolean setViewValue(View view, Cursor cursor, int columnIndex)
    {
        try
        {
            if (view instanceof ImageView) 
            {
                byte[] result = cursor.getBlob(3);//my image is stored as blob in db at 3
                Bitmap bmp = BitmapFactory.decodeByteArray(result, 0, result.length);
                ImageView im=(ImageView)findViewById(R.id.icon);
                im.setImageBitmap(bmp);
               return true;
            }

        }
        catch(Exception e)
        {
            Toast.makeText(Listmain.this, e.toString()+" err", Toast.LENGTH_LONG).show();
        }
        return false;
    }
}

3 个答案:

答案 0 :(得分:0)

试试这样:

cr.getBlob(cr.getColumnIndex("Image")) //where "Image" is column name. 

我用过它并且有效。

如果不起作用。请发布您toast message

中的exception

答案 1 :(得分:0)

  1. 写一个课程并在其中扩展simpleCusorAdapter
  2. 在类中创建一个构造函数并获取参数:context, layout, cursor, from, to
  3. 在构造函数中,初始化自定义布局的视图,如this.imageContainer=container

答案 2 :(得分:0)

package com.service;

import java.io.InputStream;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class Listmain extends ListActivity{
    Bitmap bmaps;
    private FriendAdapter friendAdapter;
    String forDeletion[][]=null;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         this.setContentView(R.layout.viewer);
         EditText etxData=(EditText)findViewById(R.id.search);
         etxData.setText(null);
         listContacts();
     }

     @Override
    protected void onResume() {
        super.onResume();
        EditText etxData=(EditText)findViewById(R.id.search);
        etxData.setText(null);
        listContacts();
    }

    public void listContacts()
     {
         Data_baseActivity db=new Data_baseActivity(this);
         try
         {

             Resources res=getResources();
             Drawable d = res.getDrawable(R.drawable.no_photo);
             bmaps = ((BitmapDrawable)d).getBitmap();

             final ListView lv = getListView();
             final EditText etx=(EditText)findViewById(R.id.search);
             final ImageButton imgbtn=(ImageButton)findViewById(R.id.refresh);

             db.open();
             Cursor cursor =getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
             if(cursor.getCount()<1)
             {
                 etx.setVisibility(View.GONE);
             }
             startManagingCursor(cursor);
             int len=cursor.getCount();
             forDeletion=new String[len][4];
             String[] from = new String[] {};
             int[] to = new int[] {};
             this.friendAdapter = new FriendAdapter(this, R.layout.rowlayout, cursor, from, to);
             lv.setAdapter(friendAdapter);
             etx.addTextChangedListener(new TextWatcher(){


                public void afterTextChanged(Editable arg0) {

                }


                public void beforeTextChanged(CharSequence arg0, int arg1,
                        int arg2, int arg3) {

                }


                public void onTextChanged(CharSequence c, int s,
                        int e, int h) {
                try
                {
                     Data_baseActivity db1=new Data_baseActivity(Listmain.this);
                     db1.open();
                     Cursor searchCursor =getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,
                             ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?" , new String[]{c+"%"}, null);
                     startManagingCursor(searchCursor);
                     String[] from = new String[] {};
                     int[] to = new int[] {};
                     friendAdapter = new FriendAdapter(Listmain.this, R.layout.rowlayout, searchCursor, from, to);
                     lv.setAdapter(friendAdapter);
                     db1.close();
                }
                catch(Exception es)
                {
                    Toast.makeText(Listmain.this, es.toString()+" g", Toast.LENGTH_LONG).show();
                }

                }

             });


         }
        catch(Exception e)
        {
            Toast.makeText(this, e.toString()+" error", Toast.LENGTH_LONG).show();
        }
         db.close();
     }


    @Override
    protected void onListItemClick(ListView l, View v, final int position, long id) {
        super.onListItemClick(l, v, position, id);
        Intent intent=new Intent(Listmain.this,Editing.class);
        String send[]=new String[4];
        send[0]=forDeletion[position][0];
        send[1]=forDeletion[position][1];
        send[2]=forDeletion[position][2];
        send[3]=forDeletion[position][3];
        intent.putExtra("com.service.id", send);
        startActivity(intent);

    }


    public class FriendAdapter extends SimpleCursorAdapter
     {
         private final Context mContext;
         private final int mLayout;
         private final Cursor mCursor;
         private final int mNameIndex;
         private final int mIdIndex;
         private final LayoutInflater mLayoutInflater;
         private int lookUp;
         private final class ViewHolder {
             public TextView name;
             public ImageView image;
            public TextView number;
            public ImageView endis;
         }

         public FriendAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
             super(context, layout, c, from, to);

             this.mContext = context;
             this.mLayout = layout;
             this.mCursor = c;
             this.mNameIndex = mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
             this.mIdIndex = mCursor.getColumnIndex(ContactsContract.Contacts._ID);
             this.lookUp=mCursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY);
             this.mLayoutInflater = LayoutInflater.from(mContext);
         }

         public View getView(int position, View convertView, ViewGroup parent) {
             try
             {
             if (mCursor.moveToPosition(position)) {
                 ViewHolder viewHolder = null;
                 String name = mCursor.getString(mNameIndex);
                 if (convertView == null) 
                 {
                         convertView = mLayoutInflater.inflate(mLayout, null);
                         viewHolder = new ViewHolder();
                         viewHolder.name = (TextView) convertView.findViewById(R.id.label);
                         viewHolder.number = (TextView) convertView.findViewById(R.id.number);
                         viewHolder.image = (ImageView) convertView.findViewById(R.id.icon);
                         viewHolder.endis = (ImageView) convertView.findViewById(R.id.endis);
                         convertView.setTag(viewHolder);
                 }
                 else 
                 {
                     viewHolder = (ViewHolder) convertView.getTag();
                 }

                     String number = null;
                     String image = mCursor.getString(mIdIndex);
                     String lookup=mCursor.getString(lookUp);
                     long lid=Long.parseLong(image);
                     Bitmap bmp = loadContactPhoto(mContext.getContentResolver(),lid,mContext);
                     if(bmp==null)
                     {
                         bmp=bmaps;
                     }
                     viewHolder.image.setImageBitmap(bmp);
                     viewHolder.name.setText(name);
                     Cursor cur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                             ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? " , new String[] {image}, null);
                     String num=null;
                     while(cur.moveToNext()) 
                     {
                         num = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                         num=num+"\n";
                     }
                     number=num;
                     viewHolder.endis.setVisibility(View.GONE);
                     viewHolder.number.setText(number);
                     forDeletion[position][0]=name;
                     forDeletion[position][1]=number;
                     forDeletion[position][2]=image;
                     forDeletion[position][3]=lookup;
                }
             }
                catch(Exception e)
                {
                    Toast.makeText(Listmain.this, e.toString()+" 2", Toast.LENGTH_LONG).show();
                }

             return convertView;
         }

     }

     public  Bitmap loadContactPhoto(ContentResolver cr, long id,Context ctx) {
         InputStream input=null;
        try
        {
         Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
         input= ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
        }
        catch(Exception e)
        {
            Toast.makeText(ctx, "Image formation error", Toast.LENGTH_LONG).show();
        }
        Bitmap bmp=BitmapFactory.decodeStream(input);
        return bmp;
       }
}
## Heading ##