Android не может получить массив байтов из намерения - PullRequest
4 голосов
/ 12 сентября 2011

Я пытаюсь отправить байт [] из одного действия в другое.в получающем действии байт [] кажется нулевым после получения намеренных дополнений.какие-нибудь идеи?

спасибо.

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

            @Override
            public void onClick(View arg0) {

                touchView.isSaved = true;
                Bundle bundle = new Bundle();
                bundle.putByteArray("byteArr", touchView.data);
                Intent intent = new Intent(mContext, SavePic.class);

                intent.putExtra(bundle );



                startActivity(intent);


            }}) ;

.

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.savepic);


        final EditText edittext = (EditText) findViewById(R.id.edittext);
        edittext.setText("");

        edittext.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {
                  // Perform action on key press

                    Bundle extras = getIntent().getExtras();
                    byte [] arr = extras.getByteArray("byteArr");
                    if(arr != null){
                        Log.e("xxxxxx", "********* arr not null");
                    }else{
                        Log.e("xxxxxx", "********* arr is null");
                    }
                      final Bitmap mCBitmap2 = BitmapFactory.decodeByteArray(arr, 0, arr.length);

.

[обновлено] я изменил значения ключей, так чтоне те же данные / bytrArr, также намерение теперь просто передает Bundle

Ответы [ 3 ]

8 голосов
/ 12 сентября 2011

Значение ключей не ваша проблема.Вы извлекаете данные не так, как вы их вводите.

В первом разделе кода вы помещаете байт [] в Bundle, а затем помещаете этот Bundle в интентыЭто означает, что ДОПОЛНИТЕЛЬНО в ключе «данные» является Пакетом, а не байтом [].Вам не нужно вставлять дополнения таким способом.Просто введите intent.putExtra("byteArr", touchView.data), чтобы вставить байт [] в качестве дополнительного.

Сделав это, вы сможете получить свой байт [] с помощью getIntent().getByteArrayExtra("byteArr") во втором разделе кода.

Наконец, как примечание: если у вас DID есть несколько дополнительных функций, которые вы хотите применить одним вызовом, вы можете поместить каждый из них в Bundle, а затем вызвать Intent.putExtras(bundle), чтобы все данные из Bundle были помещены по отдельности вНамерение.Но это не то же самое, что добавление этого пакета в качестве дополнительного.

HTH

0 голосов
/ 12 сентября 2011

Заменить

intent.putExtra ("data", bundle);

на

intent.putExtras (bundle);

0 голосов
/ 12 сентября 2011

Не присваивайте одинаковое имя ключа обоим дополнениям.Дайте другое имя.

Просто позвоните intent.putExtra(bundle); для того, чтобы поместить пакет в намерение.

...