Android运行时异常无法启动活动组件信息

时间:2015-06-21 15:29:40

标签: android

我试图在我的Android应用程序上使用谷歌位置,这是一个示例源代码。当运行这个应用程序时,它停止并给出消息,就像遗憾的是,locmaker已经停止。并从Logcat中显示Fatal exception Main和java.lang.RuntimeException:无法启动活动ComponentInfoits。任何人都知道可能是什么以及如何解决它,这是我的代码

MainActivity.java

package in.wptrafficanalyzer.locationmarkermysql;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity {

GoogleMap mGoogleMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Getting reference to SupportMapFragment
    SupportMapFragment fragment = (SupportMapFragment)     getSupportFragmentManager()
            .findFragmentById(R.id.map);

    // Creating GoogleMap from SupportMapFragment
    mGoogleMap = fragment.getMap();

    // Enabling MyLocation button for the Google Map
    mGoogleMap.setMyLocationEnabled(true);

    // Setting OnClickEvent listener for the GoogleMap
    mGoogleMap.setOnMapClickListener(new OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latlng) {
            addMarker(latlng);
            sendToServer(latlng);
        }
    });

    // Starting locations retrieve task
    new RetrieveTask().execute();

}

// Adding marker on the GoogleMaps
private void addMarker(LatLng latlng) {
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(latlng);
    markerOptions.title(latlng.latitude + "," + latlng.longitude);
    mGoogleMap.addMarker(markerOptions);
}

// Invoking background thread to store the touched location in Remove MySQL server
private void sendToServer(LatLng latlng) {
    new SaveTask().execute(latlng);
}


// Background thread to save the location in remove MySQL server
private class SaveTask extends AsyncTask<LatLng, Void, Void> {
    @Override
    protected Void doInBackground(LatLng... params) {
        String lat = Double.toString(params[0].latitude);
        String lng = Double.toString(params[0].longitude);
        String strUrl = "http://----.com/location_marker_mysql/save.php";

        URL url = null;
        try {
            url = new URL(strUrl);

            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
                    connection.getOutputStream());

            outputStreamWriter.write("lat=" + lat + "&lng="+lng);               
            outputStreamWriter.flush();
            outputStreamWriter.close();

            InputStream iStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new
            InputStreamReader(iStream));

            StringBuffer sb = new StringBuffer();

            String line = "";

            while( (line = reader.readLine()) != null){
                sb.append(line);
            }

            reader.close();
            iStream.close();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

}

// Background task to retrieve locations from remote mysql server
private class RetrieveTask extends AsyncTask<Void, Void, String>{

    @Override
    protected String doInBackground(Void... params) {
        String strUrl = "http://----.com/location_marker_mysql/retrieve.php";               
        URL url = null;
        StringBuffer sb = new StringBuffer();
        try {
            url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream iStream = connection.getInputStream();              
            BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));         
            String line = "";               
            while( (line = reader.readLine()) != null){
                sb.append(line);
            }

            reader.close();
            iStream.close();                            

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }       
        return sb.toString();
    }

    @Override
    protected void onPostExecute(String result) {           
        super.onPostExecute(result);
        new ParserTask().execute(result);
    }

}

// Background thread to parse the JSON data retrieved from MySQL server
private class ParserTask extends AsyncTask<String, Void, List<HashMap<String, String>>>{
    @Override
    protected List<HashMap<String,String>> doInBackground(String... params) {
        MarkerJSONParser markerParser = new MarkerJSONParser();
        JSONObject json = null;
        try {
            json = new JSONObject(params[0]);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        List<HashMap<String, String>> markersList = markerParser.parse(json);
        return markersList;
    }

    @Override
    protected void onPostExecute(List<HashMap<String, String>> result) {
        for(int i=0; i<result.size();i++){
            HashMap<String, String> marker = result.get(i);
            LatLng latlng = new LatLng(Double.parseDouble(marker.get("lat")), Double.parseDouble(marker.get("lng")));
            addMarker(latlng);
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

activity_main.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"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<fragment 
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>

androidmainfest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.wptrafficanalyzer.locationmarkermysql"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17" />

<!-- Protect the map component of the application using application     signature -->
<permission 
        android:name="in.wptrafficanalyzer.locationmarkermysql.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" />

<!--  Allows to receive map -->
<uses-permission    android:name="in.wptrafficanalyzer.locationmarkermysql.permission.MAPS_RECEIVE" />

<!-- Used by the Google Maps Android API V2 to download map tiles from    Google Maps servers -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- Allows the Google Maps Android API V2 to cache map tile data in the device's external storage area -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- Allows the Google Maps Android API V2 to use WiFi or mobile cell data (or both) to determine the device's location -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- Allows the Google Maps Android API V2 to use the Global Positioning System (GPS) 
to determine the device's location to within a very small area -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- Allows to contact Google Serves -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

 <!-- Google Maps Android API V2 requires OpenGL ES version 2 -->
<uses-feature 
    android:glEsVersion="0x00020000"
    android:required="true" />    

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="in.wptrafficanalyzer.locationmarkermysql.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- Specifies the Android API Key, which is obtained from Google API Console -->
    <meta-data 
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR_ANDROID_API_KEY" />      


</application>

logcat的

06-22 01:03:53.163: E/AndroidRuntime(23269): FATAL EXCEPTION: main
06-22 01:03:53.163: E/AndroidRuntime(23269): Process: in.wptrafficanalyzer.locationmarkermysql, PID: 23269
06-22 01:03:53.163: E/AndroidRuntime(23269): java.lang.RuntimeException: Unable to start activity ComponentInfo{in.wptrafficanalyzer.locationmarkermysql/in.wptrafficanalyzer.locationmarkermysql.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread.access$800(ActivityThread.java:151)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.os.Handler.dispatchMessage(Handler.java:102)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.os.Looper.loop(Looper.java:135)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread.main(ActivityThread.java:5254)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at java.lang.reflect.Method.invoke(Native Method)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at java.lang.reflect.Method.invoke(Method.java:372)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-22 01:03:53.163: E/AndroidRuntime(23269): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.Activity.setContentView(Activity.java:2145)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at in.wptrafficanalyzer.locationmarkermysql.MainActivity.onCreate(MainActivity.java:35)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.Activity.performCreate(Activity.java:5990)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
06-22 01:03:53.163: E/AndroidRuntime(23269):    ... 10 more
06-22 01:03:53.163: E/AndroidRuntime(23269): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 7571000 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" />
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.common.GooglePlayServicesUtil.zzaa(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.internal.zzy.zzaz(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.internal.zzy.zzay(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.SupportMapFragment$zzb.zzvu(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.dynamic.zza.zza(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.dynamic.zza.onInflate(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:284)
06-22 01:03:53.163: E/AndroidRuntime(23269):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
06-22 01:03:53.163: E/AndroidRuntime(23269):    ... 20 more
06-22 01:03:57.018: I/Process(23269): Sending signal. PID: 23269 SIG: 9

0 个答案:

没有答案