2012-01-05 72 views
0

即時通訊可以很容易地用於textview但textview與imageview像聯繫人姓名,號碼和圖像顯示排序上市即時通訊苦難與我搜索了許多博客,但沒有成功,請幫助....無法使用simplecursoradapter創建圖像

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; 
    } 
} 

回答

0

嘗試這樣的:

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

我用這個和它的工作。

如果它不起作用。請後,美[R湊了exception

+0

我試過並找到了一個通用而有效的解決方案。 – user1132143 2012-01-12 17:57:37

+0

@ user1132143這是? – abergmeier 2012-12-15 18:55:06

0
  1. 撰寫類,並在其擴展simpleCusorAdaptertoast message
  2. 在類中創建一個構造函數和帶參數:​​context, layout, cursor, from, to
  3. 在構造函數中,intialize您的自定義佈局的意見,像this.imageContainer=container
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 ##