0

I am trying to implement a search mechanism on my app and it will show nearby places. I'm following a tutorial on YouTube and I get this error. I don't know how to fix this since it's my first time doing this.

This is the error log

2022-03-26 21:44:00.888 20967-21012/com.example.busticketingapp E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
    Process: com.example.busticketingapp, PID: 20967
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$4.done(AsyncTask.java:399)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
        at com.example.busticketingapp.DownloadURL.retrieveUrl(DownloadURL.java:36)
        at com.example.busticketingapp.FetchData.doInBackground(FetchData.java:28)
        at com.example.busticketingapp.FetchData.doInBackground(FetchData.java:16)
        at android.os.AsyncTask$3.call(AsyncTask.java:378)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 

This is my DownloadURL class

This is exactly what is on the youtube tutorial i was following

import android.util.Log; 

`import java.io.*;`
`import java.net.HttpURLConnection;`
`import java.net.URL;`

`public class DownloadURL {`

    public String retrieveUrl(String myUrl) throws IOException{
        String data = "";
        HttpURLConnection httpURLConnection = null;
        InputStream inputStream = null;
    
        try {
            URL url = new URL(myUrl);
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.connect();
    
            inputStream=httpURLConnection.getInputStream();
    
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuffer sb = new StringBuffer();
    
            String line = "";
    
             while ((line=bufferedReader.readLine())!=null){
                 sb.append(line);
             }
    
             data = sb.toString();
             bufferedReader.close();
    
        }
        catch (Exception e){
            Log.d("Exception", e.toString());
        }
        finally {
            inputStream.close();
            httpURLConnection.disconnect();
        }
        return data;
    }

}

This is FetchData class

This is exactly what is on the youtube tutorial i was following

package com.example.busticketingapp;

`import android.os.AsyncTask;`

`import com.google.android.gms.maps.CameraUpdateFactory;`
`import com.google.android.gms.maps.GoogleMap;`
`import com.google.android.gms.maps.model.LatLng;`
`import com.google.android.gms.maps.model.MarkerOptions;`

`import org.json.JSONArray;`
`import org.json.JSONException;`
`import org.json.JSONObject;`

`import java.io.IOException;`

`public class FetchData  extends AsyncTask<Object,String,String> {`

    String googlePlacesData;
    GoogleMap googleMap;
    String url;
    
    @Override
    protected String doInBackground(Object... objects) {
         try{
             googleMap=(GoogleMap) objects[0];
             url=(String) objects[1];
             DownloadURL downloadURL = new DownloadURL();
             googlePlacesData = downloadURL.retrieveUrl(url);
         }catch (IOException e){
             e.printStackTrace();
         }
         return googlePlacesData;
    }
    
    @Override
    protected void onPostExecute(String s) {
        try{
            JSONObject jsonObject = new JSONObject(s);
            JSONArray jsonArray=jsonObject.getJSONArray("results");
    
            for(int i=0;i<jsonArray.length();i++){
                JSONObject jsonObject1=jsonArray.getJSONObject(i);
                JSONObject getLocation = jsonObject1.getJSONObject("geometry").getJSONObject("location");
    
                String lat = getLocation.getString("lat");
                String lng = getLocation.getString("lng");
    
                JSONObject getName = jsonArray.getJSONObject(i);
                String name = getName.getString("name");
    
                LatLng latLng = new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.title(name);
                markerOptions.position(latLng);
                googleMap.addMarker(markerOptions);
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,15));
            }
    
        }catch (JSONException e){
            e.printStackTrace();
        }
    }

}
Kima
  • 1
  • 1

0 Answers0