Передача массива строк из одного действия в другое

#android #arrays #bundle

#Android #массивы #пакет

Вопрос:

привет, я передаю массив строк из одного действия в другое, я правильно определяю длину массива в следующем действии, но когда я пытаюсь использовать этот массив, я получаю нулевое значение, мой код приведен ниже:

 public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {

        // TODO Auto-generated method stub

         // Sending image id to FullScreenActivity
         Log.e("jjhj","" position);
         Bitmap imageBitmap=bmp[position];
         Log.e("image","" bmp[position]);
         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
         imageBitmap.compress(CompressFormat.PNG,100, byteArrayOutputStream);
         byte[] image = byteArrayOutputStream.toByteArray();

         Bundle bundle=new Bundle();
        Intent i = new Intent(getApplicationContext(), ViewFullImage.class);

        // passing array index
       // i.putExtra("image", image);
        bundle.putStringArray("imagearray",imageGallaryArray);
        bundle.putInt("imageposition",position);;

        i.putExtras(bundle);
        startActivity(i);
    }
 

Следующее действие :

  public void onCreate(Bundle savedInstanceState) {

        // ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.viewgallaryfull);
           // getImages();

            Bundle bundle=getIntent().getExtras();
            position=bundle.getInt("imageposition");
            Log.e("position","" position);
            //String [] imagegal=new String[500];
            String [] imagegal=bundle.getStringArray("imagearray");
            int length=imagegal.length;
            Log.e("length","" length);
            Log.e("hut","" imagegal[1]);
            for(int i=0;i<length;i  )
            {
                Log.e("image",imagegal[i]);
                map = new HashMap<String, String>();
                map.put("image",imagegal[i]);
                MyArrList.add(map);
            }
 

Комментарии:

1. можете ли вы опубликовать вывод logcat.

2. @ShivamVerma:06-20 04:23:29.490: E / позиция(1623): 0 06-20 04:23:29.490: E/длина(1623): 5 06-20 04:23:29.490: E/hut(1623): ноль

3. Может быть, немного больше? Что-то, что включает номер строки, в которой происходит NPE, и было бы здорово, если бы вы могли указать эту строку в коде. просто чтобы быть уверенным.

4. нет исключения нулевого указателя, я просто получаю значение как null для imagegal[1]

5. В этом случае убедитесь, что передаваемый массив имеет правильные значения. Может быть, просто запишите значения перед передачей массива.

Ответ №1:

Ну, решение выглядит довольно простым для меня. То, как вы это описываете, либо сам массив, который вы передаете следующему Activity , либо строковые значения внутри массива равны нулю. Это не проблема передачи данных между Activities ними.

Убедитесь, что ваш массив и его значения не равны нулю, и ваша проблема будет решена.

Комментарии:

1. массив, который я передал, не равен нулю, и m также получает длину arrray

Ответ №2:

Попробуйте это.

Вы можете рассмотреть возможность использования Intent.getStringArrayExtra

В первом действии:

 final ArrayList<String> country = new ArrayList<String>();
    country.add("INDIA");
    country.add( "pak");
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(getApplicationContext(), ABC.class);
            intent.putExtra("string-array", country);
            startActivity(intent);
        }
    });
 

Во втором действии

 Bundle i=getIntent().getExtras();
         if(i!=null){
                ArrayList<String> arr = (ArrayList<String>)i.getStringArrayList("string-array");
         tv=(TextView)findViewById(R.id.textView1);
         tv.setText("" arr);
}
 

Комментарии:

1. спасибо, аман, но я использую синтаксический анализ json, и я уже выполнил эту работу, используя hashmap, и я хочу использовать этот массив в hashmap в следующем действии…

2. @Neha тогда, пожалуйста, примите ответ, чтобы помочь и другим.

3. ни один из ответов здесь не решил мою проблему … я использовал какой-то альтернативный метод.

Ответ №3:

Если сама длина в порядке, и вы не получаете исключение NullReferenceException, я ожидаю, что значения массива или хотя бы одного из них равны НУЛЮ.

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


РЕДАКТИРОВАТЬ: рассмотрев ваш код создания

 for(int i=0;i<jArray.length();i  ) { 
    imageGallaryArray=new String[jArray.length()]; // PROBLEM HERE!
    json_data = jArray.getJSONObject(i); 
    map = new HashMap<String, String>(); 
    imageGallary=json_data.getString("image"); 
    imageGallaryArray[i]=json_data.getString("image"); 
    Log.e("imagegallarysdf","" imageGallaryArray[i]);
}
 

Вы воссоздаете imageGallaryArray на каждой итерации. Настройте свой код следующим образом:

 imageGallaryArray=new String[jArray.length()]; // MOVED UP; Once created and now filled properly
map = new HashMap<String, String>(); // Unused, but why recreate it on each iteration again?

for(int i=0;i<jArray.length();i  ) { 
    json_data = jArray.getJSONObject(i); 
    imageGallary=json_data.getString("image"); 
    imageGallaryArray[i]=json_data.getString("image"); 
    Log.e("imagegallarysdf","" imageGallaryArray[i]);
}
 

Комментарии:

1. я проверил значение в первом действии, они верны, и оно возвращает значение null при любом индексе

2. Не могли бы вы опубликовать код создания массива строк, а также оценить с помощью вашего отладчика, действительно ли значения массива равны нулю или logcat просто вызывает проблемы, устанавливая точку останова в строке после getStringArray и проверяя значения вручную.

3. Код создания массива строк, который будет передан из первого действия во второе.

4. for(int i=0;i<JArray.length();i ) { imageGallaryArray=новая строка[JArray.length()]; json_data = JArray.getJSONObject(i); map = новая хэш-карта<Строка, строка>(); imageGallary=json_data.getString(«изображение»); imageGallaryArray[i]=json_data.getString(«изображение»); Log.e(«imagegallarysdf»,»» imageGallaryArray[i]);

5. : спасибо за оптимизацию, но проблема не в моем первом действии, так как массив, который я передаю, в порядке, я проверил его .. проблема в другом действии

Ответ №4:

Проблема заключается в самом коде. Изменить так

     imageGallaryArray=new String[jArray.length()]; 
    for(int i=0;i<jArray.length();i  ) 
    { 
     json_data = jArray.getJSONObject(i); 
     map = new HashMap<String, String>(); 
     imageGallary=json_data.getString("image"); 
     imageGallaryArray[i]=json_data.getString("image");   
     Log.e("imagegallarysdf","" imageGallaryArray[i]); 
    }