将字符串数组从一个活动传递到另一个活动

时间:2014-06-20 08:30:45

标签: android arrays bundle

嗨我正在将一个字符串数组从一个活动传递到另一个活动,我在下一个活动中获取数组的长度是正确的,但是当我尝试使用该数组时,我得到的是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);
            }

4 个答案:

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