2011-10-18 2 views
3

하나의 액티비티를 다른 액티비티로 보내려합니다. 내가 다음 클래스 B에서이 널 포인터를 보여주는 것 번들 개념을 사용하여 클래스 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을 활동에서 다른 활동으로 복제하는 데 필요한 정보를 전달해야합니다.

관련 문제