坚持使用Intent

时间:2013-12-28 15:42:41

标签: android android-intent bitmap android-activity

我正在尝试将我从图库中选择的图像传递给另一个活动。除此之外,在同一个班级中,我有几个editText来从用户那里获取数据。要从editText获取数据并传递SecondActivity,请使用Intent

save=(Button)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {

    @Override   
    public void onClick(View v) {

    Intent intent = new Intent(NewCard.this, Template.class);

            intent.putExtra("name", Name);
            intent.putExtra("company", Company);
            intent.putExtra("phone", Phone);
            intent.putExtra("mobile", Mobile);
            intent.putExtra("address", Address);
            intent.putExtra("email", Email);
            intent.putExtra("website", Website);
            intent.putExtra("title", Title); 

            startActivity(intent);

        }
    });

为了让我有'SwitchCase''onActivityResult',我用它来挑选图片并在imageView FirstActivity上设置。这是openGallery意图加倍onActivityResult

private void openGallerylogo() {
    // TODO Auto-generated method stub
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, 1);
}
private void openGalleryqr() {
    // TODO Auto-generated method stub
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, 2);
}

SwitchCase onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent data){
    super.onActivityResult(requestCode, resultcode, data);

    switch(1){
    case 1:

    if (requestCode == 1) 
    {
        if (data != null && resultcode == RESULT_OK) 
        {              

            Uri selectedImage = data.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String PicPath1 = cursor.getString(columnIndex);
            cursor.close();

    logoview.setBackgroundResource(0);
    logoview.setImageBitmap(BitmapFactory.decodeFile(PicPath1));

    break;
        }}  


    case 2:
        if (requestCode == 2) 
        {
            if (data != null && resultcode == RESULT_OK) 
            {              

                Uri selectedImage = data.getData();                     
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                cursor.moveToFirst();                   
                String PicPath2 = cursor.getString(columnIndex);
                cursor.close();
    qrcodeview.setBackgroundResource(0);
    qrcodeview.setImageBitmap(BitmapFactory.decodeFile(PicPath2));
    break;
}}

    }

    }

所以现在主要的是在下面插入代码:

    final Intent newdata = new Intent(NewCard.this, Template.class);
    newdata.putExtra("picture_path1", PicPath1);
    newdata.putExtra("picture_path2", PicPath2);
    startActivity(newdata);

通常情况下,我必须插入save.setOnClickListener的正文并获取数据+图像以传递SecondActivity,就像我editText一样。但我与Second Intent发生冲突。

或者我可以插入:

logoview.setBackgroundResource(0);
logoview.setImageBitmap(BitmapFactory.decodeFile(PicPath1));
Intent newdata = new Intent(NewCard.this, Template.class);
newdata.putExtra("picture_path1", PicPath1);

startActivity(newdata);

然后它有效,但意图立即开始,我无法setText以上。谢谢你的帮助。


这是我班上的所有代码:

package com.example.mapcard;

public class NewCard extends Activity {

ImageView logoview,qrcodeview, location;
Bitmap bmp1,bmp2;
Button save,clear;
public String count="logo";
EditText txtName,txtCompany,txtPhone,txtMobile,txtAddress,txtEmail,txtWebsite,txtTitle;


//  public String url = Environment.getExternalStorageDirectory().getPath()+"/Android/data/com.example.mapcard/Mapcard/BusinessCard/";
public String filename = "Mapcard.csv";
//  public String fileContent;

ReadCSV csv;
StringBuffer filePath;
//String picPath1;
File file;

public final static String EXTRA_MESSAGE = "com.example.mapcard.MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_card);


    txtName= (EditText) findViewById(R.id.txtName);
    txtCompany= (EditText) findViewById(R.id.txtCompany);
    txtPhone= (EditText) findViewById(R.id.txtPhone);
    txtMobile = (EditText) findViewById(R.id.txtMobile);
    txtAddress = (EditText) findViewById(R.id.txtAddress);
    txtEmail = (EditText) findViewById(R.id.txtEmail);
    txtWebsite = (EditText) findViewById(R.id.txtWebsite);
    txtTitle = (EditText) findViewById(R.id.txtTitle);


filePath = new StringBuffer();

   filePath.append("/sdcard/Android/data/");
    //filePath.append(Environment.getExternalStorageDirectory().getPath()+"/Android/data/com.example.mapcard/Mapcard/BusinessCard/");
    file = new File(filePath+filename.toString());

    csv = new ReadCSV(file);

    save=(Button)findViewById(R.id.save);
    save.setOnClickListener(new View.OnClickListener() {

        @Override   
        public void onClick(View v) {

            // TODO Auto-generated method stub

//              GenerateCsv.generateCsvFile1(url, filename, fileContent);

            csv.writeHeader(txtName.getText().toString()+ "," 
                    +txtCompany.getText().toString()
                    + "," +txtPhone.getText().toString()
                    + "," +txtMobile.getText().toString()
                    + "," +txtAddress.getText().toString()
                    + "," +txtEmail.getText().toString()
                    + "," +txtWebsite.getText().toString()
                    + "," +txtTitle.getText().toString());


            Toast.makeText(getApplicationContext(), "Saved Directory!", Toast.LENGTH_SHORT).show();

   //    startActivity(new Intent(NewCard.this, Main.class));


            EditText txtName = (EditText) findViewById(R.id.txtName);
            EditText txtCompany= (EditText) findViewById(R.id.txtCompany);
            EditText txtPhone= (EditText) findViewById(R.id.txtPhone);
            EditText txtMobile = (EditText) findViewById(R.id.txtMobile);
            EditText txtAddress = (EditText) findViewById(R.id.txtAddress);
            EditText txtEmail = (EditText) findViewById(R.id.txtEmail);
            EditText txtWebsite = (EditText) findViewById(R.id.txtWebsite);
            EditText txtTitle = (EditText) findViewById(R.id.txtTitle);


            String Name=txtName.getEditableText().toString(),
            Company=txtCompany.getEditableText().toString(), Phone=txtPhone.getEditableText().toString(), 
            Mobile=txtMobile.getEditableText().toString(), Address=txtAddress.getEditableText().toString(), 
            Email=txtEmail.getEditableText().toString(), Website=txtWebsite.getEditableText().toString(), 
            Title=txtTitle.getEditableText().toString();                

            Intent intent = new Intent(NewCard.this, Template.class);

            intent.putExtra("name", Name);
            intent.putExtra("company", Company);
            intent.putExtra("phone", Phone);
            intent.putExtra("mobile", Mobile);
            intent.putExtra("address", Address);
            intent.putExtra("email", Email);
            intent.putExtra("website", Website);
            intent.putExtra("title", Title); 

              startActivity(intent);

        }
    });

    clear=(Button)findViewById(R.id.clear);
    clear.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Toast.makeText(getApplicationContext(), "Screen Cleared!", Toast.LENGTH_SHORT).show();
            txtName.getText().clear();
            txtCompany.getText().clear();
            txtPhone.getText().clear();
            txtMobile.getText().clear();
            txtAddress.getText().clear();
            txtEmail.getText().clear();
            txtWebsite.getText().clear();               
            txtTitle.getText().clear();


        }
    });



    location=(ImageView)findViewById(R.id.location);
    location.setOnClickListener(new OnClickListener()
    {
    @Override
    public void onClick(View v) {
    //  startActivity(new Intent(NewCard.this, GoogleMap.class));

        EditText txtAddress = (EditText) findViewById(R.id.txtAddress);

        String Address=txtAddress.getEditableText().toString();

        Intent intent = new Intent(NewCard.this, GoogleMap.class);

        intent.putExtra("address", Address);

        startActivity(intent);  

    }

    });

    logoview=(ImageView)findViewById(R.id.logoview);
    logoview.setOnClickListener(new OnClickListener() 
    {            

        @Override
        public void onClick(View arg0) {
            //startActivity(new Intent(NewCard.this, Logo.class));
            count="logo";

       //               openGallery1();
            openGallerylogo();
        }


    }); 

    qrcodeview=(ImageView)findViewById(R.id.qrcodeview);
    qrcodeview.setOnClickListener(new OnClickListener() 
    {            


        @Override
        public void onClick(View arg0) {
            count="qr";
  //                openGallery();
            openGalleryqr();

        }
    }); 



}

private void openGallerylogo() {
    // TODO Auto-generated method stub
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, 1);
}
private void openGalleryqr() {
    // TODO Auto-generated method stub
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, 2);
}


@Override
protected void onActivityResult(int requestCode, int resultcode, Intent data){
    super.onActivityResult(requestCode, resultcode, data);



    switch(1){
    case 1:

    if (requestCode == 1) 
    {
        if (data != null && resultcode == RESULT_OK) 
        {              

            Uri selectedImage = data.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String PicPath1 = cursor.getString(columnIndex);
            cursor.close();

                // intent.getExtras().get("data");

        //    startActivity(newdata);

                 //             if(bmp1 != null && !bmp1.isRecycled())


//              ImageView logoview = (ImageView) findViewById(R.id.logoview);
//              logoview.setImageBitmap(BitmapFactory.decodeFile(filePath));
        //  bmp1 = BitmapFactory.decodeFile(PicPath1);

 //             if (count.equals("logo")){

                logoview.setBackgroundResource(0);
                logoview.setImageBitmap(BitmapFactory.decodeFile(PicPath1));
                Intent newdata = new Intent(NewCard.this, Template.class);
                newdata.putExtra("picture_path1", PicPath1);
 //newdata.putExtra("picture_path2", PicPath2);
                startActivity(newdata);



                 //   newdata.putExtra("picture_path2", PicPath2);

            break;
        }}  


    case 2:
        if (requestCode == 2) 
        {
            if (data != null && resultcode == RESULT_OK) 
            {              

                Uri selectedImage = data.getData();                     
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                cursor.moveToFirst();                   
                String PicPath2 = cursor.getString(columnIndex);
                cursor.close();




                    qrcodeview.setBackgroundResource(0);
            qrcodeview.setImageBitmap(BitmapFactory.decodeFile(PicPath2));              

        break;

        }}

    }

    }


 //     final Intent newdata = new Intent(NewCard.this, Template.class);
 //     newdata.putExtra("picture_path1", PicPath1);
 //     newdata.putExtra("picture_path2", PicPath2);
//      startActivity(newdata);
//      
//  }

@Override
protected void onPause(){
    super.onPause();
}
}

1 个答案:

答案 0 :(得分:1)

只需将picpath作为实例变量存储到您的活动中。像任何其他生命周期的实例变量一样管理它们(通过onSaveInstanceState()onCreate(Bundle))并让你的onClickListener在那里引用它们。

String mPicPath1, mPicPath2;

protected void onCreate(Bundle icicle) {

   mPicPath1 = null;
   mPicPath2 = null; // or restore these from the icicle Bundle
   ...
}

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent data){
    super.onActivityResult(requestCode, resultcode, data);

    switch(requestCode){
    case 1:
        if (data != null && resultcode == RESULT_OK) 
        {              

            Uri selectedImage = data.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            mPicPath1 = cursor.getString(columnIndex);
            cursor.close();

            logoview.setBackgroundResource(0);
            logoview.setImageBitmap(BitmapFactory.decodeFile(mPicPath1));
        }
    break;  
    case 2:
        if (data != null && resultcode == RESULT_OK) 
        {              

            Uri selectedImage = data.getData();                     
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            cursor.moveToFirst();                   
            mPicPath2 = cursor.getString(columnIndex);
            cursor.close();
            qrcodeview.setBackgroundResource(0);
            qrcodeview.setImageBitmap(BitmapFactory.decodeFile(mPicPath2));
        }
    break;
    }
    View saveButton = findViewById(R.id.save);
    // If the image paths are required before the activity can be started you can do this
    if (saveButton != null) {
       saveButton.setEnabled( !TextUtils.isEmpty(mPicPath1) &&  !TextUtils.isEmpty(mPicPath2));
    }
}

然后在保存按钮部分:

save=(Button)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {

@Override   
public void onClick(View v) {

Intent intent = new Intent(NewCard.this, Template.class);

        intent.putExtra("name", Name);
        intent.putExtra("company", Company);
        intent.putExtra("phone", Phone);
        intent.putExtra("mobile", Mobile);
        intent.putExtra("address", Address);
        intent.putExtra("email", Email);
        intent.putExtra("website", Website);
        intent.putExtra("title", Title); 
        // Add your picture paths if they are appropriate
        if (!TextUtils.isEmpty(mPicPath1)) {
            intent.putExtra("picture_path1", PicPath1);
        }
        if (!TextUtils.isEmpty(mPicPath2)) {
           intent.putExtra("picture_path2", PicPath2);
        }
        startActivity(intent);

    }
});