2014-09-05 4 views
0

다음 활동은 서버에서 LatLng를 가져 와서 도시 간 거리를 계산하려고 시도합니다. Logcat은 어디에서 왔는지 이해할 수없는 NullPointerException을 제공합니다. 코드가 완전하지 않음을 유의하십시오 (아직 listView가 생성되지 않았습니다 ..)하지만 이것은 주요 문제가 아닙니다. 어떤 도움을 주시면 감사하겠습니다. 문제알 수 없음 NullPointerException

package com.example.tranfer; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.LinkedHashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import com.google.android.gms.maps.model.LatLng; 
import android.app.ProgressDialog; 
import android.content.SharedPreferences; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.widget.Toast; 

public class CheckItineraries extends FragmentActivity { 

    private ProgressDialog pDialog; 
    String username , origin_lat ,origin_lng ,destination_lat ,destination_lng , 
    waypoint1_lat ,waypoint1_lng ,waypoint2_lat ,waypoint2_lng; 
    int i, j ,b; 

    ArrayList<LatLng> markerPoints; 
    // URL to get contacts JSON 
    private static String LOGIN_URL = "http://xxxxxxxxxxxxx/check_itineraries.php"; 

    public static final String PREFS_NAME = "MyPreferencesFile"; 

    // JSON Node names 

    JSONParser jsonParser = new JSONParser(); 



    // contacts JSONArray 
    JSONArray contacts = null; 

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> itinList; 


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

     itinList = new ArrayList<HashMap<String, String>>(); 

     new GetData().execute(); 
    } 

    private class GetData extends AsyncTask<Void, Void, Void> { 

     public void onPreExecute() { 
      super.onPreExecute(); 
      Log.d("meg", "meg"); 

      pDialog = new ProgressDialog(CheckItineraries.this); 
      pDialog.setMessage("Καταχωρώ τα στοιχεία..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 

      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
      username = settings.getString("username", "nikos"); 

     } 

     protected Void doInBackground(Void... args) { 
      // TODO Auto-generated method stub 

      try { 

       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 

       JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", 
         params); 

       // JSONObject jObj = new JSONObject(); 
       JSONArray itin_results = json.getJSONArray("itin_results"); 

       for (int i = 0; i < itin_results.length(); i++) { 
        JSONObject c = itin_results.getJSONObject(i); 

        String username = c.getString("username"); 
        String startPoliPro = c.getString("startPoliPro"); 
        String start_lat_pro = c.getString("start_lat_pro"); 
        String start_lng_pro = c.getString("start_lng_pro"); 
        String finalPoliPro = c.getString("finalPoliPro"); 
        String final_lat_pro = c.getString("final_lat_pro"); 
        String final_lng_pro = c.getString("final_lng_pro"); 

        LinkedHashMap<String, String> pinakas = new LinkedHashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        pinakas.put("username", username); 
        pinakas.put("startPoliPro", startPoliPro); 
        pinakas.put("start_lat_pro", start_lat_pro); 
        pinakas.put("start_lng_pro", start_lng_pro); 
        pinakas.put("finalPoliPro", finalPoliPro); 
        pinakas.put("final_lat_pro", final_lat_pro); 
        pinakas.put("final_lng_pro", final_lng_pro); 

        // adding contact to contact list 
        itinList.add(pinakas); 
        b = itin_results.length(); 

       } 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 

      origin_lat = itinList.get(0).get("start_lat_pro").toString(); 
      origin_lng = itinList.get(0).get("start_lng_pro").toString(); 
      destination_lat = itinList.get(0).get("start_lat_pro").toString(); 
      destination_lng = itinList.get(0).get("start_lat_pro").toString(); 

      for (i = 0; i <b; i++) { 
       Log.d("panikos", itinList.get(i).get("username").toString()); 
       Log.d("panikos", itinList.get(i).get("startPoliPro").toString()); 
       Log.d("panikos", itinList.get(i).get("start_lat_pro").toString()); 
       Log.d("panikos", itinList.get(i).get("start_lng_pro").toString()); 
       Log.d("panikos", itinList.get(i).get("finalPoliPro").toString()); 
       Log.d("panikos", itinList.get(i).get("final_lat_pro").toString()); 
       Log.d("panikos", itinList.get(i).get("final_lng_pro").toString()); 

      waypoint1_lat = itinList.get(i).get("start_lat_pro").toString(); 
      waypoint1_lng = itinList.get(i).get("start_lng_pro").toString(); 
      waypoint2_lat = itinList.get(i).get("final_lat_pro").toString(); 
      waypoint2_lng = itinList.get(i).get("final_lng_pro").toString(); 

      LatLng origin1 = new LatLng(Double.parseDouble(origin_lat), Double.parseDouble(origin_lng)); 
      LatLng destination = new LatLng(Double.parseDouble(destination_lat), Double.parseDouble(destination_lng)); 
      LatLng waypoint1 = new LatLng(Double.parseDouble(waypoint1_lat), Double.parseDouble(waypoint1_lng)); 
      LatLng waypoint2 = new LatLng(Double.parseDouble(waypoint2_lat), Double.parseDouble(waypoint2_lng)); 

      Log.d("origin1", origin1.toString()); 
      Log.d("destination", destination.toString()); 
      Log.d("waypoint1", waypoint1.toString()); 
      Log.d("waypoint2", waypoint2.toString()); 


    **167**  markerPoints.add(origin1); 
      markerPoints.add(destination); 
      markerPoints.add(waypoint1); 
      markerPoints.add(waypoint2); 

      //if (markerPoints.size() >= 4) { 
       LatLng or = markerPoints.get(0); 
       LatLng dest = markerPoints.get(1); 
      // LatLng way1 = markerPoints.get(2); 
      // LatLng way2 = markerPoints.get(3); 

       // Getting URL to the Google Directions API 
       String url = getDirectionsUrl(or, dest); 

       DownloadTask downloadTask = new DownloadTask(); 

       // Start downloading json data from Google Directions API 
       downloadTask.execute(url); 
      //} 
      } 
     } 
      //} 
      //}   


     private String getDirectionsUrl(LatLng or, LatLng dest) { 
      // Origin of route 
      String str_origin = "origin=" + or.latitude + ","+ or.longitude; 

      // Destination of route 
      String str_dest = "destination=" + dest.latitude + "," + dest.longitude; 

      // Sensor enabled 
      String sensor = "sensor=false"; 



      // Building the parameters to the web service 
      String parameters = str_origin + "&" + str_dest + "&" + sensor; 

      // Output format 
      String output = "json"; 

      // Building the url to the web service 
      String url = "https://maps.googleapis.com/maps/api/directions/" 
        + output + "?" + parameters; 

      return 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 sb = new StringBuffer(); 

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

       data = sb.toString(); 

       br.close(); 

      } catch (Exception e) { 
       Log.d("Exception while downloading url", e.toString()); 
      } finally { 
       iStream.close(); 
       urlConnection.disconnect(); 
      } 
      return data; 
     } 
    /// 
     // Fetches data from url passed 
     //// 
     private class DownloadTask extends AsyncTask<String, Void, String> { 

      // Downloading data in non-ui thread 
      @Override 
      protected String doInBackground(String... url) { 

       // For storing data from web service 
       String data = ""; 

       try { 
        // Fetching the data from web service 
        data = downloadUrl(url[0]); 
       } catch (Exception e) { 
        Log.d("Background Task", e.toString()); 
       } 
       return data; 
      } 

      // Executes in UI thread, after the execution of 
      // doInBackground() 
      @Override 
      protected void onPostExecute(String result) { 
       super.onPostExecute(result); 

       ParserTask parserTask = new ParserTask(); 

       // Invokes the thread for parsing the JSON data 
       parserTask.execute(result); 

      } 
     } 

     //e 
     public class ParserTask extends 
     AsyncTask<String, Integer, List<List<HashMap<String, String>>>> { 

    // Parsing the data in non-ui thread 
    @Override 
    protected List<List<HashMap<String, String>>> doInBackground(
      String... jsonData) { 

     JSONObject jObject; 
     List<List<HashMap<String, String>>> routes = null; 

     try { 
      jObject = new JSONObject(jsonData[0]); 
      DirectionsJSONParser parser = new DirectionsJSONParser(); 

      // Starts parsing data 
      routes = parser.parse(jObject); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return routes; 
    } 

    // Executes in UI thread, after the parsing process 
    @Override 

    //o 
    protected void onPostExecute(List<List<HashMap<String, String>>> result) { 
     ArrayList<LatLng> points = null; 
     String distance = ""; 
     //String duration = ""; 

     if (result.size() < 1) { 
      Toast.makeText(getBaseContext(), "No Points", 
        Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     // Traversing through all the routes 
     for (int i = 0; i < result.size(); i++) { 
      points = new ArrayList<LatLng>(); 

      // Fetching i-th route 
      List<HashMap<String, String>> path = result.get(i); 

      // Fetching all the points in i-th route 
      for (int j = 0; j < path.size(); j++) { 
       HashMap<String, String> point = path.get(j); 

       if (j == 0) { // Get distance from the list 
        distance = (String) point.get("distance"); 
        continue; 
       } else if (j == 1) { // Get duration from the list 
        //duration = (String) point.get("duration"); 
        continue; 
       } 

       double lat = Double.parseDouble(point.get("lat")); 
       double lng = Double.parseDouble(point.get("lng")); 
       LatLng position = new LatLng(lat, lng); 

       points.add(position); 
      } 

     } 

     Log.d("finito", distance); 
    // res.setText("Distance:" + distance + ", Duration:" + duration); 

    } 

    //o 
} 
     //e 

     }  
    } 

09-05 16:53:17.129: D/origin1(23107): lat/lng: (37.98152344296127,23.73720746487379) 
09-05 16:53:17.129: D/destination(23107): lat/lng: (37.98152344296127,37.98152344296127) 
09-05 16:53:17.129: D/waypoint1(23107): lat/lng: (37.98152344296127,23.73720746487379) 
09-05 16:53:17.129: D/waypoint2(23107): lat/lng: (40.63984024315307,22.926733419299126) 
09-05 16:53:17.129: D/AndroidRuntime(23107): Shutting down VM 
09-05 16:53:17.129: W/dalvikvm(23107): threadid=1: thread exiting with uncaught exception (group=0x410202a0) 
09-05 16:53:17.159: E/AndroidRuntime(23107): FATAL EXCEPTION: main 
09-05 16:53:17.159: E/AndroidRuntime(23107): java.lang.NullPointerException 
09-05 16:53:17.159: E/AndroidRuntime(23107): at com.example.tranfer.CheckItineraries$GetData.onPostExecute(CheckItineraries.java:167) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at com.example.tranfer.CheckItineraries$GetData.onPostExecute(CheckItineraries.java:1) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.os.AsyncTask.finish(AsyncTask.java:631) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.os.Looper.loop(Looper.java:137) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at android.app.ActivityThread.main(ActivityThread.java:4944) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at java.lang.reflect.Method.invokeNative(Native Method) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at java.lang.reflect.Method.invoke(Method.java:511) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
09-05 16:53:17.159: E/AndroidRuntime(23107): at dalvik.system.NativeStart.main(Native Method) 

답변

0

null이 아니므로 초기화하지 마십시오.

당신은 이런 식으로 할 수있는 :

ArrayList<LatLng> markerPoints = new ArrayList<>(); 
+0

너무 너무 바보 .... 감사합니다 – user3649152

0

markerPoints는 사용하기 전에 초기화되지 로그 캣을 시작하는 위치

제가 라인 (167)을 표시했다. 초기화해야합니다 :

markerPoints = new ArrayList<LatLng>();