嗨我正在将一个字符串数组从一个活动传递到另一个活动,我在下一个活动中获取数组的长度是正确的,但是当我尝试使用该数组时,我得到的是null值,我的代码如下:
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);
}
答案 0 :(得分:0)
对我来说,解决方案看起来很简单。您将其切换到下一个Activity
的数组本身或数组中的String值的描述方式为null 。 这不是Activities
之间传输数据的问题。
确保您的数组及其值不为空,您的问题将得到解决。
答案 1 :(得分:0)
如果长度本身没问题且你没有得到NullReferenceException,我希望数组的值或至少其中一个是NULL。
因此,在第一个活动中检查您的值的创建和存储到数组中。传递String数组的方式绝对正确。
编辑:已考虑过您的创作代码
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]);
}
答案 2 :(得分:0)
试试这个。
您可以考虑使用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);
}
答案 3 :(得分:0)
问题在于代码本身。 像这样改变
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]);
}