2014-01-11 7 views
0

좋아요, Google API 장소로 작업하고 있습니다. XML 파일에 조각 요소를 만들어야합니다. 내가 만든 프래그먼트 요소로 인해 내 응용 프로그램이 중단됩니다. 새 프로젝트에서 Fragment 요소를 시도했기 때문에 동일한 자바 코드가 아니라고 확신합니다. 같은 일이 발생했습니다. 여기 여기 조각을 만들면 응용 프로그램이 손상됩니다.

package com.example.learnaboutme; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Timer; 
import java.util.TimerTask; 

import org.apache.commons.logging.Log; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.graphics.Color; 
import android.location.Location; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.model.Polyline; 
import com.google.android.gms.maps.model.PolylineOptions; 

public class MainActivity extends FragmentActivity { 

    Context[] context = new Context[1]; 
    GPS[] gps = new GPS[1]; 
    Home home = null; 
    RelativeLayout[] rel = new RelativeLayout[1]; 
    XMLParase xmlParase = null; 
    private GoogleMap myMap; 
    Polyline line; 

    Location location; 

    // Static LatLng 
    LatLng startLatLng = new LatLng(30.707104, 76.690749); 
    LatLng endLatLng = new LatLng(30.721419, 76.730017); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     this.setContentView(R.layout.activity_main); 
     final TextView text = (TextView)this.findViewById(R.id.text); 
     gps[0] = new GPS(); 
     gps[0].start(this); 
     home = new Home(); 
     context[0] = this; 
     rel[0] = (RelativeLayout)findViewById(R.id.rel); 
     home.Initalize(rel, context); 
     xmlParase = new XMLParase(); 
     location = gps[0].GetCoor(); 
     ((SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map)).getMap(); 
     try{ 

      final LatLng PERTH = new LatLng(-31.90, 115.86); 
      Marker perth = myMap.addMarker(new MarkerOptions() 
            .position(PERTH) 
            .anchor((float)0.5,(float)0.5) 
            .rotation((float)90.0)); 

      String urlTopass = makeURL(startLatLng.latitude, 
        startLatLng.longitude, endLatLng.latitude, 
        endLatLng.longitude); 
     // new connectAsyncTask(urlTopass).execute(); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     Timer timer = new Timer(); 
     final Handler handler = new Handler(); 
     timer.schedule(new TimerTask(){ 
      public void run(){ 
       handler.post(new Runnable(){ 
        public void run() 
        { 
         home.Check(gps); 
         String data = MainActivity.this.xmlParase.readXML("locations.xml", context[0], "Home", "address"); 
         if(!data.equals("")) { 
         text.setText(data); 
         } 
        } 
       }); 
      } 
     }, 2000, 1000); 
    } 

    private class connectAsyncTask extends AsyncTask<Void, Void, String> { 
     private ProgressDialog progressDialog; 
     String url; 

     connectAsyncTask(String urlPass) { 
      url = urlPass; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(context[0]); 
      progressDialog.setMessage("Fetching route, Please wait..."); 
      progressDialog.setIndeterminate(true); 
      progressDialog.show(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      JSONParser jParser = new JSONParser(); 
      String json = jParser.getJSONFromUrl(url); 
      return json; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      progressDialog.hide(); 
      if (result != null) { 
       drawPath(result); 
      } 
     } 
    } 

    public String makeURL(double sourcelat, double sourcelog, double destlat, 
      double destlog) { 
     StringBuilder urlString = new StringBuilder(); 
     urlString.append("http://maps.googleapis.com/maps/api/directions/json"); 
     urlString.append("?origin=");// from 
     urlString.append(Double.toString(sourcelat)); 
     urlString.append(","); 
     urlString.append(Double.toString(sourcelog)); 
     urlString.append("&destination=");// to 
     urlString.append(Double.toString(destlat)); 
     urlString.append(","); 
     urlString.append(Double.toString(destlog)); 
     urlString.append("&sensor=false&mode=driving&alternatives=true"); 
     return urlString.toString(); 
    } 

    public class JSONParser { 

     InputStream is = null; 
     JSONObject jObj = null; 
     String json = ""; 

     // constructor 
     public JSONParser() { 
     } 

     public String getJSONFromUrl(String url) { 

      // Making HTTP request 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 

       json = sb.toString(); 
       is.close(); 
      } catch (Exception e) { 
      } 
      return json; 

     } 
    } 

    public void drawPath(String result) { 
     if (line != null) { 
      myMap.clear(); 
     } 
     myMap.addMarker(new MarkerOptions().position(endLatLng).icon(
       BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); 
     myMap.addMarker(new MarkerOptions().position(startLatLng).icon(
       BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); 
     try { 
      // Tranform the string into a json object 
      final JSONObject json = new JSONObject(result); 
      JSONArray routeArray = json.getJSONArray("routes"); 
      JSONObject routes = routeArray.getJSONObject(0); 
      JSONObject overviewPolylines = routes 
        .getJSONObject("overview_polyline"); 
      String encodedString = overviewPolylines.getString("points"); 
      List<LatLng> list = decodePoly(encodedString); 

      PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true); 
      for (int z = 0; z < list.size(); z++) { 
       LatLng point = list.get(z); 
       options.add(point); 
      } 
      line = myMap.addPolyline(options); 

      /*for (int z = 0; z < list.size() - 1; z++) { 
       LatLng src = list.get(z); 
       LatLng dest = list.get(z + 1); 
       line = myMap.addPolyline(new PolylineOptions() 
         .add(new LatLng(src.latitude, src.longitude), 
           new LatLng(dest.latitude, dest.longitude)) 
         .width(5).color(Color.BLUE).geodesic(true)); 
      }*/ 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private List<LatLng> decodePoly(String encoded) { 

     List<LatLng> poly = new ArrayList<LatLng>(); 
     int index = 0, len = encoded.length(); 
     int lat = 0, lng = 0; 

     while (index < len) { 
      int b, shift = 0, result = 0; 
      do { 
       b = encoded.charAt(index++) - 63; 
       result |= (b & 0x1f) << shift; 
       shift += 5; 
      } while (b >= 0x20); 
      int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
      lat += dlat; 

      shift = 0; 
      result = 0; 
      do { 
       b = encoded.charAt(index++) - 63; 
       result |= (b & 0x1f) << shift; 
       shift += 5; 
      } while (b >= 0x20); 
      int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
      lng += dlng; 

      LatLng p = new LatLng((((double) lat/1E5)), 
        (((double) lng/1E5))); 
      poly.add(p); 
     } 

     return poly; 
    } 


    public boolean onCreateOptionsMenu(Menu var1) { 
     this.getMenuInflater().inflate(R.menu.main, var1); 
     return true; 
    } 
} 

내 오류

01-10 16:51:07.610: W/dalvikvm(8390): threadid=1: thread exiting with uncaught exception (group=0x410789d8) 
01-10 16:51:07.680: E/AndroidRuntime(8390): FATAL EXCEPTION: main 
01-10 16:51:07.680: E/AndroidRuntime(8390): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.learnaboutme/com.example.learnaboutme.MainActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class fragment 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.os.Looper.loop(Looper.java:137) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread.main(ActivityThread.java:4477) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at dalvik.system.NativeStart.main(Native Method) 
01-10 16:51:07.680: E/AndroidRuntime(8390): Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class fragment 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:262) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.Activity.setContentView(Activity.java:2071) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.example.learnaboutme.MainActivity.onCreate(MainActivity.java:61) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.Activity.performCreate(Activity.java:4701) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  ... 11 more 
01-10 16:51:07.680: E/AndroidRuntime(8390): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 4030500 but found 0. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.common.GooglePlayServicesUtil.n(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.internal.q.v(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.internal.q.u(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.SupportMapFragment$b.cE(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.SupportMapFragment$b.a(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.dynamic.a.a(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.dynamic.a.onInflate(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
01-10 16:51:07.680: E/AndroidRuntime(8390):  ... 21 more 

+0

'fragment'를 XML의 'Fragment'에 대문자로 만드시겠습니까? – csmckelvey

+0

@csmckelvey 방금 시도했습니다./ – Ramilol

+0

이봐, 그럴 가치가있어 :) – csmckelvey

답변

1

에서 참조 : 또한이 Error inflating class fragment

에 Dandre 앨리슨에 의해 지적

import android.support.v4.app.Fragment; 

, 당신과 같은 앱이 더 문제가 있음을 seens Logcat에서 볼 수 있습니다.

01-10 16:51:07.680: E/AndroidRuntime(8390): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 4030500 but found 0. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

어쨌든 Logcat을주의 깊게 읽으려고하면 충돌의 원인에 대해 많은 힌트가 있습니다. 내가 한 것처럼 특정 부분을 격리하고 Google에서 검색해보십시오.

+0

오 고마워! 그것은 그것을하는 것처럼 보였다. 내가 그것에 들어가고 난 후에 나는 내가 또한 허가를 놓치고 있었다라고 말하는 또 다른 오류가 있었다! 팁을 주셔서 감사합니다. 그것을 사용하게 될 것입니다. :) – Ramilol

+0

괜찮습니다. 여기에 권한 오류를 게시 해 주시길 바랍니다. 그러나 일반적으로 권한이있는 경우에는 AndroidManifest.xml에 선언해야합니다. 이 예제와 같이 :'' – xadun

0

이 시도 감사한다 내 XML 코드 여기

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" 
    android:id="@+id/rel" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" 
     android:id="@+id/text" /> 
    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.SupportMapFragment" 
     android:name="com.example.learnaboutme.MainActivity"/> 

</RelativeLayout> 

내 자바 코드 그냥이 필요한 경우입니다 .. 매니페스트

,210
<application 
     android:allowBackup="true" 
    ... > 

<meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    .... 

    </application> 

가져올 thisthis

+0

도움이되지 않았다 :/thanks tho :) – Ramilol

관련 문제