图像未在下一个活动中加载

时间:2013-09-10 14:05:58

标签: android json listview

我正在使用json方法在listview中获取文本和图像。我在listview中获取文本和图像。但我只在下一个活动中获取文本。我不知道如何在下一次活动中获得图像。任何人都可以帮助我......?

mycode的:

MainActivity

listview.setOnItemClickListener(new OnItemClickListener(){

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

                // getting values from selected ListItem
                String title = ((TextView) view.findViewById(R.id.title)).getText().toString();
                String desc = ((TextView) view.findViewById(R.id.desc)).getText().toString();
                String image = ((ImageView) view.findViewById(R.id.image1)).getImageMatrix().toString();

                // Starting new intent
                Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
                in.putExtra("TAG_TITLE", title);
                in.putExtra("TAG_DESC", desc);
                in.putExtra("TAG_IMAGE", image);

                startActivity(in);
            }
        });

    } 

SingleMenuItemActivity

公共类SingleMenuItemActivity扩展了Activity {

Bitmap bmimage = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.single_list);

    // getting intent data
    Intent in = getIntent();

    // Get JSON values from previous intent
    String title = in.getStringExtra("TAG_TITLE");
    String desc = in.getStringExtra("TAG_DESC");
    String image = in.getStringExtra("TAG_IMAGE");

    try {
        URL url = new URL(image);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.connect();
        InputStream is = conn.getInputStream();
        bmimage = BitmapFactory.decodeStream(is);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


     TextView lbltitle = (TextView) findViewById(R.id.title);
     TextView lbldesc = (TextView) findViewById(R.id.desc);
     ImageView lblimage = (ImageView) findViewById(R.id.image1);

    // Displaying all values on the screen

    lbltitle.setText(title);
    lbldesc.setText(desc);
    lblimage.setImageBitmap(bmimage); 


}

}

2 个答案:

答案 0 :(得分:3)

最佳解决方案不是通过parcelable发送位图,因为图像可能太大 - 某些设备中的应用程序会崩溃。

我建议只在sdcard中保存位图 - 通过extras link / url发送位图保存,在下一个活动中只是从sdcard加载位图。

Saving bitmap

Load bitmap

答案 1 :(得分:0)

传递图像位图而不是字符串

ImageView imageView = (ImageView) view.findViewById(R.id.image1);
Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

// ...

// Starting new intent
Bundle extras = new Bundle();
extras.putParcelable("TAG_IMAGE", image);
in.putExtras(extras);
startActivity(in);

在第二个活动中,从包中读出

Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("TAG_IMAGE");
// ...
lblimage.setImageBitmap(bmp );