Android 如何将URL路径转换为图像并显示在列表视图上

Android 如何将URL路径转换为图像并显示在列表视图上,android,Android,根据我尝试搜索商店的位置,搜索结果显示在单元格的列表视图中。我正在从Google获取名称、地址、相关图标和评级,但问题是如何在列表单元格的列表视图上显示图像。我获取了图像的URL路径。我还使用位图getBitmapFromURL()将URL路径转换为BitMapImage。但它显示了NPE(空指针异常)。下面我将粘贴代码 public class NearByActivity extends Activity implements LocationListener { // private

根据我尝试搜索商店的位置,搜索结果显示在单元格的列表视图中。我正在从Google获取名称、地址、相关图标和评级,但问题是如何在列表单元格的列表视图上显示图像。我获取了图像的URL路径。我还使用位图getBitmapFromURL()将URL路径转换为BitMapImage。但它显示了NPE(空指针异常)。下面我将粘贴代码

public class NearByActivity extends Activity implements LocationListener
{
//    private ListAdapter adapter;
    ListView lvPlaces;
    ImageView ivPhone,ivCamera,ivPrinter,ivMore;
    String name,vicinity,formatted_phone_number,rating,icon;
    double mLatitude=0;
    double mLongitude=0;
    SharedPreferences spref;
    ArrayList<HashMap<String, String>> placesListItems = new ArrayList<HashMap<String,String>>();
//    CustomListAdapter customListAdapter;

    public ImageLoader imageLoader;


    private static final String Name = "name";
    private static final String Vicinity = "vicinity";
    private static final String Rating="rating";
    private static final String Icon="icon";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nearby);

        lvPlaces=(ListView)findViewById(R.id.lvPlaces);


        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
        lvPlaces.setAdapter(adapter);




        lvPlaces.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> MainActivity, final View view,int position, long id)
            {

                final TextView tvVicinity=(TextView)view.findViewById(R.id.tvVicinity);
                final TextView tvRating=(TextView)view.findViewById(R.id.tvRating);
                final TextView tvName=(TextView)view.findViewById(R.id.tvName);
                final ImageView ivPhone = (ImageView)findViewById(R.id.ivPhone);
                final ImageView ivCamera = (ImageView)findViewById(R.id.ivCamera);
                final ImageView ivPrinter = (ImageView)findViewById(R.id.ivPrinter);
                final ImageView ivMore = (ImageView)findViewById(R.id.ivMore);

                ivPhone.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(getApplication(),"Do you want the call",Toast.LENGTH_SHORT).show();
                    }
                });
                ivCamera.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(getApplication(),"Do you want to take pics",Toast.LENGTH_SHORT).show();
                    }
                });
                ivPrinter.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(getApplication(),"Do you want to print",Toast.LENGTH_SHORT).show();
                    }
                });
                ivMore.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(getApplication(),"Do you want more",Toast.LENGTH_SHORT).show();
                    }
                });


                tvName.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        String getName=tvName.getText().toString();
                        String getVicinity=tvVicinity.getText().toString();
                        String getRating=tvRating.getText().toString();

                        Intent i = new Intent(getApplication(),Information.class);
                        i.putExtra(Name,getName);
                        i.putExtra(Vicinity,getVicinity);
                        i.putExtra(Rating,getRating);

                        startActivity(i);
                    }
                });
            }

        });

            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location From GPS
            Location location = locationManager.getLastKnownLocation(provider);

            if(location!=null)

            {
                onLocationChanged(location);
            }

            locationManager.requestLocationUpdates(provider,20000,0,this);

            StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
            sb.append("location="+mLatitude+","+mLongitude);
            sb.append("&radius=1000");
            sb.append("&types=beauty_salon");
            sb.append("&sensor=true");
            sb.append("&key=AIzaSyBgtVo5lfnDQFY8W44TfMevgg2klgj5WeA");

            // Creating a new non-ui thread task to download json data
            PlacesTask placesTask = new PlacesTask();

            // Invokes the "doInBackground()" method of the class PlaceTask
            placesTask.execute(sb.toString());
        }

    /** A method to download json data from url */

    private String downloadUrl(String strUrl) throws IOException
    {
        String data = "";
        InputStream iStream = null;
        HttpURLConnection urlConnection = null;
        try{
            URL url = new URL(strUrl);

            // Creating an http connection to communicate with url
            urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

            StringBuffer sb1  = new StringBuffer();

            String line = "";
            while( ( line = br.readLine())  != null)
            {
                sb1.append(line);
            }
            data = sb1.toString();

            br.close();

        }
        catch(Exception e)
        {
            Log.d("Exception while downloading url", e.toString());
        }
        finally
        {
            iStream.close();
            urlConnection.disconnect();
        }

        return data;
    }

    @Override
    public void onLocationChanged(Location location)
    {
        mLatitude = location.getLatitude();
        mLongitude = location.getLongitude();

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }

    @Override
    public void onProviderEnabled(String provider)
    {
    }

    @Override
    public void onProviderDisabled(String provider)
    {
    }

    public  Bitmap getBitmapFromURL(String icon ) {
        try {
            URL url = new URL(icon);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }




    private class PlacesTask extends AsyncTask<String, Integer, String>
    {
        String data = null;
        @Override
        protected String doInBackground(String... url)
        {
            try
            {
                data = downloadUrl(url[0]);
            }
            catch(Exception e)
            {
                Log.d("Background Task",e.toString());
            }
            return data;
        }

        @Override
        protected void onPostExecute(String result)
        {
            ParserTask parserTask = new ParserTask();

            // Start parsing the Google places in JSON format
            // Invokes the "doInBackground()" method of the class ParseTask
            parserTask.execute(result);
        }
    }

    private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>
    {
        @Override
        protected List<HashMap<String, String>> doInBackground(String... jsonData)
        {
            JSONObject jObject;
            List<HashMap<String, String>> places = null;
            PlaceJSONParser placeJsonParser = new PlaceJSONParser();
            try
            {
                jObject = new JSONObject(jsonData[0]);

                /** Getting the parsed data as a List construct */
                places = placeJsonParser.parse(jObject);
            }
            catch(Exception e)
            {
                Log.d("Exception",e.toString());
            }
            return places;
        }
        @Override
        protected void onPostExecute(List<HashMap<String,String>> list)
        {
            for(int i=0;i<list.size();i++)
            {
                HashMap<String, String> hmPlace = list.get(i);
                name = hmPlace.get("place_name");
                vicinity = hmPlace.get("vicinity");
                rating=hmPlace.get("rating");
                formatted_phone_number = hmPlace.get("phone_number");
                icon = hmPlace.get("icon");
                placesListItems.add(hmPlace);

            }
            Toast.makeText(getApplication(),""+icon,Toast.LENGTH_SHORT).show();


            ImageView ivPics = (ImageView)findViewById(R.id.ivPics);
            ivPics.setImageBitmap(getBitmapFromURL(icon));



            ListAdapter adapter=new SimpleAdapter(NearByActivity.this,placesListItems,
                    R.layout.myplace,
                   new String[]{"place_name","vicinity","rating","phone_number"},
                   new int[]{R.id.tvName,R.id.tvVicinity,R.id.tvRating,R.id.ivPhone});
            lvPlaces.setAdapter(adapter);
        }

     }
试试这个

URL url = new URL("http://abcd.com/resize?sq=60&uid=2216744464");
Bitmap bmp =  BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);

您是否向manifest.xml添加了INTERNET权限

<uses-permission android:name="android.permission.INTERNET" /> 

是的,我已经添加了权限。当我尝试调试应用程序时,我得到了URL路径,但如何使用简单列表适配器显示图像我不确定,先生。。。。先生,如果您对我的完整程序有任何其他想法,请告诉我。公共位图getBitmapFromURL(字符串图标){try{URL URL URL=新URL(图标);在这里,当我添加断点时,我得到了图像URl。@Gautaw Yadav您好,先生,问题只存在于ivpics中。在这种情况下,您能否将此标记为正确答案。您不能使用默认适配器您必须自定义适配器
<uses-permission android:name="android.permission.INTERNET" /> 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference