#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]);
}