Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用位图数组设置ImageView_Android_Bitmap_Imageview - Fatal编程技术网

Android 如何使用位图数组设置ImageView

Android 如何使用位图数组设置ImageView,android,bitmap,imageview,Android,Bitmap,Imageview,我正在做一个通过JSON获取图像URL的演示,在获取ULR之后,我将下载这些图像并将它们显示到GridView中。为了存储下载的图像,我使用Bitmap数组并将其传递给ImageAdapter。现在我想在下一个活动的ImageView上显示这些图像,因为我在第二个活动中使用了下面的代码 // get intent data Intent i = getIntent(); // Selected image id int position = i.getEx

我正在做一个通过
JSON
获取图像URL的演示,在获取
ULR
之后,我将下载这些图像并将它们显示到
GridView
中。为了存储下载的图像,我使用
Bitmap
数组并将其传递给
ImageAdapter
。现在我想在下一个活动的
ImageView
上显示这些图像,因为我在第二个活动中使用了下面的代码

        // get intent data
    Intent i = getIntent();
    // Selected image id
    int position = i.getExtras().getInt("id");
    ImageAdapter imageAdapter = new ImageAdapter(this);
    ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
    imageView.setBackgroundDrawable(imageAdapter.bm[position]);
但是它给了我类似于
的错误,类型ImageView中的方法setImageDrawable(Drawable)不适用于参数(位图)
。请告诉我如何将图像从
Bitmap
数组设置为
ImageView

ImageAdapter类:

    public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    public Bitmap bm[]=new Bitmap[4];
    ImageView imageView;

    // Constructor
    public ImageAdapter(Context c, Bitmap[] bm){
        mContext = c;
        this.bm = bm; 
    }


    public ImageAdapter(Context c) {
        mContext = c;
    }


    @Override
    public int getCount() {
        return bm.length;
    }

    @Override
    public Object getItem(int position) {
        return bm[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        imageView = new ImageView(mContext);
        imageView.setImageBitmap(bm[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
        return imageView;
    }



}
主要类别:

    public class AndroidGridLayoutActivity extends Activity {

    public static final  Bitmap bm[]=new Bitmap[4];
    public static  ImageAdapter img;
    public static  String[] imageurls;
    public static  GridView gridView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);
        Log.d("LOG", "1");
        new GetImageUrls().execute();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }       
        Log.d("LOG", "7");
        gridView = (GridView) findViewById(R.id.grid_view);
        // Instance of ImageAdapter Class
        Log.d("LOG", "8");
        img = new ImageAdapter(getApplicationContext(), bm);
        Log.d("LOG", "9");
        gridView.setAdapter(img);
        Log.d("LOG", "10");


        /**
         * On Click event for Single Gridview Item
         * */
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                Log.d("LOG", "11");
                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                Log.d("LOG", "12");
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
    }

    public class GetImageUrls  extends AsyncTask<Void, Void, Void>
    {
        Context context;
        private ProgressDialog pDialog;
        // URL to get JSON
        private static final String url= "http://xxx.x.xxx/demo/test.json";
        private static final String MAIN = "mainCategory";
        private static final String IMAGE = "mcatimage";
        // JSONArray
        JSONArray loginjsonarray=null;
        //result from url

        protected void onPreExecute() {
            Log.d("LOG", "2");
            // Showing progress dialog
            pDialog = new ProgressDialog(getApplicationContext());
            pDialog.setMessage("Loading...");
            pDialog.setCancelable(false);
            //pDialog.show();
            Log.d("LOG", "3");
        }
        protected Void doInBackground(Void... arg) {
            Log.d("LOG", "4");
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();
            Log.d("LOG", "5");
             // Making a request to url and getting response
            String jsonstr = sh.makeServiceCall(url, ServiceHandler.POST, null);
            Log.d("Response: ", ">"+jsonstr);
            if(jsonstr!=null)
            {
                try {
                        JSONObject jsonObj =new JSONObject(jsonstr);
                        loginjsonarray=jsonObj.getJSONArray(MAIN);
                        imageurls=new String[loginjsonarray.length()];
                        for(int i=0;i<loginjsonarray.length();i++){
                            JSONObject l=loginjsonarray.getJSONObject(i);
                            imageurls[i]=l.getString(IMAGE);
                            Log.d("imageurls: ", imageurls[i]);
                        }
                        for(int i=0;i<imageurls.length;i++)
                        {   
                            bm[i]=DownloadImage(imageurls[i]);
                            Log.d("LOG", bm[i].toString());
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
            }else{
                Toast.makeText(context,"Check your Internet Connection",Toast.LENGTH_SHORT).show();
            }
            return null;
        }


        public Bitmap DownloadImage(String STRURL) {
            Bitmap bitmap = null;
            InputStream in = null;       
            try {
                    int response = -1;
                    URL url = new URL(STRURL);
                    Log.d("DownloadImage: ", url.toString());
                    URLConnection conn = url.openConnection();
                    if (!(conn instanceof HttpURLConnection))             
                        throw new IOException("Not an HTTP connection");
                    try{
                        HttpURLConnection httpConn = (HttpURLConnection) conn;
                        httpConn.setAllowUserInteraction(false);
                        httpConn.setInstanceFollowRedirects(true);
                        httpConn.setRequestMethod("GET");
                        httpConn.connect();
                        response = httpConn.getResponseCode();  
                        Log.d("DownloadImage response: ", Integer.toString(response));
                        if (response == HttpURLConnection.HTTP_OK) {
                            in = httpConn.getInputStream();
                            Log.d("DownloadImage: ", in.toString());
                        }                    
                    } catch (Exception ex) {
                        throw new IOException("Error connecting"); 
                    }
                    bitmap = BitmapFactory.decodeStream(in);
                    Log.d("DownloadImage Bitmap: ", bitmap.toString());
                    in.close();
                }catch (IOException e1) {
                    e1.printStackTrace();
                }
            Log.d("LOG", "6");
            return bitmap; 
        }

        protected void onPostExecute(Integer result) {
            // Dismiss the progress dialog
            if(pDialog.isShowing()){
                pDialog.dismiss();
            }

        }
    }

}
}

它的使用方法很简单

这是一个非常简单的使用方法


您应该使用,setImageBitmap(位图bm)方法将位图设置为此ImageView的内容

所以你的代码是

imageView.setImageBitmap(imageAdapter.bm[position]);

您应该使用,设置图像位图(位图bm)方法,将位图设置为此图像视图的内容

所以你的代码是

imageView.setImageBitmap(imageAdapter.bm[position]);

这里,我给你我的应用程序代码,它可以与int position的drawable resources中的gallery一起工作,根据你的需要修改它,应该可以与你的代码一起工作

我在画廊的目的是:

@Override
public void onItemClick(AdapterView<?> parent, View  view, int position, long id) {
    int selectedId = imgs[position]; 
    Intent intent = new Intent(Gallery3DActivity.this,MainActivity.class);
    intent.putExtra("imageId", selectedId);
    startActivity(intent);
}
您的代码与我的代码类似,但您从url将其发送到位图,我从可绘制资源获取,在活动java上设置了一个长id列表,用于名称和位置,我选择了一个我想设置为化身的代码。他们将其传递到主活动的内部意图,并定义包含可绘制缓存的意图名称到imageview,在按下按钮onclick后,我将转换为位图、位图转换为字符串、字符串转换为图像,以在启动主活动时恢复imageview视图,并将字符串保存到SharedReferences,即使在关闭应用程序后,也会再次恢复imageview视图


祝你好运

在这里,我给你我的应用程序代码,该应用程序可与具有int位置的可绘图资源中的图库一起使用,根据你的需要进行修改,应该可以与你的代码一起使用

我在画廊的目的是:

@Override
public void onItemClick(AdapterView<?> parent, View  view, int position, long id) {
    int selectedId = imgs[position]; 
    Intent intent = new Intent(Gallery3DActivity.this,MainActivity.class);
    intent.putExtra("imageId", selectedId);
    startActivity(intent);
}
您的代码与我的代码类似,但您从url将其发送到位图,我从可绘制资源获取,在活动java上设置了一个长id列表,用于名称和位置,我选择了一个我想设置为化身的代码。他们将其传递到主活动的内部意图,并定义包含可绘制缓存的意图名称到imageview,在按下按钮onclick后,我将转换为位图、位图转换为字符串、字符串转换为图像,以在启动主活动时恢复imageview视图,并将字符串保存到SharedReferences,即使在关闭应用程序后,也会再次恢复imageview视图



祝你好运,

,,,错误消失了,但图像不会显示在下一个活动中如果你在当前活动中设置图像,那么你怎么能在下一个活动中看到这一点,伙计,你想说什么我听不懂,,,错误已消失,但图像未显示在下一个活动中如果您在当前活动中设置图像,那么您如何在下一个活动中看到这一点dude您想说什么我无法理解错误已消失,但图像未显示在下一个活动中尝试imageView.setImageBitmap(getItem[position]);并发布您的FullImageActivity类。我添加了FullActivity类,请检查。在ImageAdapter的getView()方法中添加一个日志,看看控件是否到达那里。我认为它不会被执行。让我知道?嘿,我在每一行设置了日志,,,getView()执行成功..:(错误消失,但图像不会显示在下一个活动中尝试imageView.setImageBitmap(getItem[position]),并发布您的FullImageActivity类。我添加了FullActivity类,请检查。在getView()中添加日志)方法,并查看控件是否到达那里。我想它没有被执行。让我知道吗?嘿,我在每一行设置了日志,,,getView()成功执行..:(错误已消失,但图像未在下一个活动中显示运行时有任何错误?或者可能是您有空白位图检查图像是否为空?没有错误,并且图像也已下载..在第二个活动的日志中,图像位置也正确..):(@Aksh您可以显示位图数组初始化吗?错误已消失,但图像未在下一个活动中显示运行时出现任何错误?或者您可能有空白位图检查图像是否为空?没有错误,并且图像也已下载..在第二个活动中,在日志中,图像位置也正确..:(@Aksh您可以显示位图数组初始化吗?
@Override
public void onItemClick(AdapterView<?> parent, View  view, int position, long id) {
    int selectedId = imgs[position]; 
    Intent intent = new Intent(Gallery3DActivity.this,MainActivity.class);
    intent.putExtra("imageId", selectedId);
    startActivity(intent);
}
Intent avatar = getIntent(); 
int imageId = avatar.getIntExtra("imageId", -0); 
// -0 would be a default value
// -1 will crash with a missing resource

if (getIntent().getExtras() != null) {
    Avatar.setImageResource(imageId);
    savedAvatar.setImageResource(imageId);
} else {
    Avatar.setImageResource(R.mipmap.ic_launcher);
}