开发者

Why is my Android app Crashing?

My android app keeps crashing but there aren't any errors. Heres the codes.

LocationActivity.java UPDATED

package com.marakana.tutomaps;

import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class LocationActivity extends TabActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec1, spec2, spec3;  // Resusable TabSpec for each tab
    Intent intent1, intent2, intent3;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent1 = new Intent().setClass(this, HaffActivity.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec1 = tabHost.newTabSpec("Haff").setIndicator("Haff",
                      res.getDrawable(R.drawable.ic_tab_haff))
                  .setContent(intent1);
    tabHost.addTab(spec1);

    // Do the same for the other tabs
    intent2 = new Intent().setClass(this, MapsActivity.class);
    spec2 = tabHost.newTabSpec("Maps").setIndicator("Maps",
                      res.getDrawable(R.drawable.ic_tab_maps))
                  .setContent(intent2);
    tabHost.addTab(spec2);

    intent3 = new Intent().setClass(this, ProfileActivity.class);
    spec3 = tabHost.newTabSpec("Profile").setIndicator("Profile",
                      res.getDrawable(R.drawable.ic_tab_profile))
                  .setContent(intent3);
    tabHost.addTab(spec3);

    tabHost.setCurrentTab(2);
}
}

Here is the main layout file. UPDATED *main.xml*

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent"      android:layout_height="fill_parent">
        <View android:layout_width="fill_parent" android:layout_height="0.5dip"
            android:background="#000" />
        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_marginLeft="0dip" android:layout_marginRight="0dip" />
        <View android:layout_width="fill_parent" android:layout_height="2dip"
            android:background="#696969" />
        <View android:layout_width="fill_parent" android:layout_height="2dip"
            android:background="#000" />
        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" android:layout_height="fill_parent" />
    </LinearLayout>
</TabHost>

Heres the manifest file UPDATED

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.marakana.tutomaps"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".LocationActivity"
              android:label="@string/app_name">
        <intent-filter>
                    <uses-library android:name="com.google.android.maps" />
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<activity android:name=".HaffActivity">
</activity>

<activity android:name=".MapsActivity">
</activity>

<activity android:name=".ProfileActivity">
</activity>

</application>

MapsActivity.java

   package com.marakana.tutomaps;

   import java.io.IOException;
   import java.util.List;

   import android.location.Address;
   import android.location.Geocoder;
   import android.location.Location;
   import android.location.LocationListener;
   import android.location.LocationManager;
   import android.os.Bundle;
   import android.util.Log;
   import android.widget.TextView;

   import com.google.android.maps.GeoPoint;
   import com.google.android.maps.MapActivity;
   import com.google.android.maps.MapController;
   import com.google.android.maps.MapView;

   public class MapsActivity extends MapActivity implements LocationListener {

private static final String TAG = "MapsActivity";

LocationManager locationManager;
Geocoder geocoder;
TextView locationText;
MapView map;    
MapController mapController;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    locationText = (TextView)this.findViewById(R.id.lblLocationInfo);
    map = (MapView)this.findViewById(R.id.mapview);
    map.setBuiltInZoomControls(true);

    mapController = map.getController();
    mapController.setZoom(16);

    locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE);

    geocoder = new Geocoder(this);

    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location != null) {
        Log.d(TAG, location.toString());
        this.onLocationChanged(location);   
    }
}

@Over开发者_JAVA技巧ride
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);
}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    Log.d(TAG, "onLocationChanged with location " + location.toString());
    // Displays lat, long, altitude and bearing
    String text = String.format("Lat:\t %f\nLong:\t %f\nAlt:\t %f\nBearing:\t %f", location.getLatitude(), location.getLongitude(), location.getAltitude(), location.getBearing());
    this.locationText.setText(text);

    try {
        // This gets a list of addresses 
        List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10);
        for (Address address : addresses) {
            this.locationText.append("\n" + address.getAddressLine(0));
        }

        // Convert latitude and longitude into int that the GeoPoint constructor can understand
        int latitude = (int)(location.getLatitude() * 1000000);
        int longitude = (int)(location.getLongitude() * 1000000);

        GeoPoint point = new GeoPoint(latitude,longitude);
        mapController.animateTo(point);

    } catch (IOException e) {
        Log.e("LocateMe", "Could not get Geocoder data", e);
    }
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}
   }

Please help me.


I think you did one mistake... You are passing Layout value instead of intent..

just check your code with mine.. you are passing R.layout.hafflayout instead of intent in setContent(intent); line

Updated

TabHost.TabSpec spec1,spec2,spec3;  // Resusable TabSpec for each tab
Intent intent1,intent2,intent3;
intent1 = new Intent().setClass(this, HaffActivity.class);

// Initialize a TabSpec for each tab and add it to the TabHost
spec1 = tabHost.newTabSpec("Haff").setIndicator("Haff",
                  res.getDrawable(R.drawable.ic_tab_haff))
              .setContent(intent1);
tabHost.addTab(spec);

// Do the same for the other tabs
intent2 = new Intent().setClass(this, MapsActivity.class);
spec2 = tabHost.newTabSpec("Maps").setIndicator("Maps",
                  res.getDrawable(R.drawable.ic_tab_maps))
              .setContent(intent2);
tabHost.addTab(spec);

intent3 = new Intent().setClass(this, ProfileActivity.class);
spec3 = tabHost.newTabSpec("Profile").setIndicator("Profile",
                  res.getDrawable(R.drawable.ic_tab_profile))
              .setContent(intent3);
tabHost.addTab(spec);

Update:

you didnt add dot(.) before activity's name in menifest.xml

<activity android:name=".HaffActivity">
</activity>

<activity android:name=".MapsActivity">
</activity>

<activity android:name=".ProfileActivity">
</activity>

Update...Latest

in your MapsActivity.class you setContentView(R.layout.main); so please change it and add your xml for MapActivity


Have you add to your AndroidManifest.xml :

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".LoadingActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity> 

    <activity android:name="HaffActivity"
    </activity>

    <activity android:name="MapsActivity"
    </activity>

    <activity android:name="ProfileActivity"
    </activity>

</application> 

Because if you have different activities in your project then you must add them in the manifest.


Try cleaning the project. Also, are you using the google libraries for maps? You need to add a link to Google API.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜