新增功能:将图像从一个活动发送到另一个活动

时间:2016-03-04 05:59:29

标签: android image android-intent android-activity android-bitmap

我尝试过堆栈溢出的答案,但没有工作,得到空指针。

我尝试过的事情:

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    ImageView ivSelectCardLogo;
    Button btnNext;

    private static int RESULT_LOAD_IMG = 1;
    String imgDecodableString;
    Bitmap bmp;
    ByteArrayOutputStream stream;
    byte[] byteArray;



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

        btnNext=(Button)findViewById(R.id.btnNext);

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              bmp = BitmapFactory.decodeResource(getResources(), R.drawable.idymlogo);
                 stream = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                 byteArray = stream.toByteArray();
                Intent intent = new Intent(getApplicationContext(), NewActivity.class);
                intent.putExtra("picture", byteArray);
                startActivity(intent);

            }
        });
        ivSelectCardLogo=(ImageView)findViewById(R.id.ivSelectCardLogo);

        ivSelectCardLogo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadImagefromGallery(v);
            }
        });

    }

    public void loadImagefromGallery(View view) {
        // Create intent to Open Image applications like Gallery, Google Photos
        Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        // Start the Intent
        startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        try {
            // When an Image is picked
            if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
                    && null != data) {
                // Get the Image from data

                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                // Get the cursor
                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                // Move to first row
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                imgDecodableString = cursor.getString(columnIndex);
                cursor.close();
          //      ivSelectCardLogo=(ImageView)findViewById(R.id.ivSelectCardLogo);

                // Set the Image in ImageView after decoding the String
                ivSelectCardLogo.setImageBitmap(BitmapFactory
                        .decodeFile(imgDecodableString));


            } else {
                Toast.makeText(this, "You haven't picked Image",
                        Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                    .show();
        }

    }



}

NextActivity:

public class NewActivity extends AppCompatActivity {

    ImageView ivCardOneLogo;


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

        Bundle extras = getIntent().getExtras();
        byte[] byteArray = extras.getByteArray("picture");

        Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
        ivCardOneLogo = (ImageView) findViewById(R.id.ivCardOneLogo);

        ivCardOneLogo.setImageBitmap(bmp);



    }


}

logcat的:

 FATAL EXCEPTION: main
                                                   Process: com.imagetransfer, PID: 19845
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.imagetransfer/com.imagetransfer.NewActivity}: java.lang.NullPointerException
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                                                       at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:136)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5017)
                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:515)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                       at dalvik.system.NativeStart.main(Native Method)
                                                    Caused by: java.lang.NullPointerException
                                                       at com.imagetransfer.NewActivity.onCreate(NewActivity.java:25)
                                                       at android.app.Activity.performCreate(Activity.java:5231)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                                                       at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:136) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5017) 
                                                       at java.lang.reflect.Method.invokeNative(Native Method) 
                                                       at java.lang.reflect.Method.invoke(Method.java:515) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                       at dalvik.system.NativeStart.main(Native Method) 

我只想将从图库中获取的图像传递到另一个活动,并在下一个活动中在图像视图中设置该图像。简单,但没有适当的演示.. 尝试几乎所有的堆栈问题,但没有一个适合我 .. 建议是热烈欢迎..

0 个答案:

没有答案