2011-10-18 10 views
3

ImageViewフォームのアクティビティを別のアクティビティに送信したいとします。私は、クラスBには、それはNULLポインタを示すのバンドルの概念を使用して、クラスBにクラスAから画像ビューを渡すようにしようとしていた場合exception.Belowは、クラスAの私のコードは、ここにアンドロイドのアクティビティ間でイメージビューを渡すには

public class First extends Activity { 
    Cursor cursor1; 
    boolean y,n; 
    ImageView login; 
    Button enroll; 
    String AndroidId; 
    SQLiteDatabase db1,db; 
    private ContentValues values; 
    DopenHelper helper; 


    String TableName = "tbl_finger"; 
    ImageView FingerImageData; 
    String fingerID,DivID,enrolledtype; 



    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause();   
     helper.close(); 
     db.close(); 
     db1.close(); 

    } 

    protected void onResume() 
    { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     helper =new DopenHelper(getApplicationContext()); 
     db=helper.getWritableDatabase(); 
     db1=helper.getWritableDatabase(); 
     values=new ContentValues(); 
     enroll=(Button)findViewById(R.id.enroll_button); 



     FingerImageData = (ImageView)findViewById(R.id.fingerid); 
     AndroidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID); 
     //"[[email protected]"; 
     //"[email protected]";  

      helper = new DopenHelper(First.this);   

      cursor1 = db1.rawQuery("SELECT template,enrolled,deviceID FROM " + TableName, null); 

      try { 

       db1 = this.openOrCreateDatabase("remoteid.db", MODE_PRIVATE, null); 

       if(cursor1 != null) 
       { 
        if(cursor1.moveToFirst()) 
        { 
         do { 
          DivID = cursor1.getString(cursor1.getColumnIndex("deviceID")); 
          fingerID = cursor1.getString(cursor1.getColumnIndex("template")); 
          enrolledtype = cursor1.getString(cursor1.getColumnIndex("enrolled")); 

          //Toast.makeText(getApplicationContext(), DivID, Toast.LENGTH_LONG).show(); 

         }while (cursor1.moveToNext()); 
        } 
       } 

      } 

      catch(Exception e) { 
       Log.e("Error", "Error", e); 

      } finally { 
       if (db1 != null) 
        db1.close(); 

      } 

      cursor1.close(); 

      final Bundle bundle = new Bundle(); 

     enroll.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 


       if((FingerImageData.getContext().toString()).equals(fingerID)) 
       { 
        Intent menuintent=new Intent(First.this,Menu.class); 
        bundle.putString("ThumbInfo2", FingerImageData.toString());     
        menuintent.putExtras(bundle); 
        startActivity(menuintent); 

       } 
       /*else if((FingerImageData.getContext().toString()).equals(fingerID) && AndroidId.equals(DivID) ) 
        { 
         Intent menuintent=new Intent(First.this,Menu.class); 
         startActivity(menuintent); 

        } */ 
       else 
       { 

        values.put("template", FingerImageData.getContext().toString()); 
        values.put("enrolled", getEnrolledType()); 
        values.put("DeviceID", AndroidId.getBytes().toString()); 
        db.insert("tbl_finger", "Id", values); 


        bundle.putString("ThumbInfo1", FingerImageData.toString());      
        Intent enroll=new Intent(First.this,Enroll.class); 
        enroll.putExtras(bundle); 
        startActivity(enroll);      

       } 

      } 

      private String getEnrolledType() { 
       // TODO Auto-generated method stub 
       //AndroidId.equals(DivID) && 
       if((FingerImageData.getContext().toString()).equals(fingerID)){ 
        return "N"; 

       } 
       else { 
        return "Y"; 
       } 

      } 
     }); 

    } 


    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.first);   

    } 

} 

クラスBでのエラー: -

+0

どのようにImageViewを渡していますか? – Brian

+0

あなたがしようとしているものの簡潔で完全なコード例を投稿できますか?あなたは、あなたが持っている問題に固有ではないすべての余分なコードを削除することができます。それは私たちがあなたを助けることをはるかに容易にします。 –

答えて

9

アクティビティ間でビューを渡すべきではありません。エクストラを使用して、インテントのイメージの場所を渡し、新しいアクティビティで再度ロードする必要があります。

例:

Intent intent = new Intent(context, MyActivity.class); 
    intent.putExtra("imagePath", pathToImage); 
    startActivity(intent); 

そして、あなたの受信アクティビティには:

String path = getIntent().getStringExtra("imagePath"); 
    Drawable image = Drawable.createFromPath(path); 
    myImageView.setImageDrawable(image); 
5

あなたは絶対別のアクティビティから画像ビューを渡したくないありません。 ViewsViewContainerと親のActivityを参照してください。これにより、Viewを所有するActivityが非表示になったり閉じたりすると、ガベージコレクタがメモリを消去しなくなります。代わりに、Intentsを使用して、アクティビティからImageViewを複製するのに必要な情報を別のアクティビティに渡す必要があります。

関連する問題