为什么我的Android应用程序崩溃了?

时间:2011-09-21 10:23:38

标签: java android eclipse layout tabs

我的Android应用程序一直崩溃,但没有任何错误。 下面是代码。

LocationActivity.java 已更新

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);
}
}

这是主要的布局文件。 已更新 * 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>

继承清单文件更新

 <?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);   
    }
}

@Override
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

}
   }

请帮助我。

4 个答案:

答案 0 :(得分:0)

您是否已加入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> 

因为如果您的项目中有不同的活动,那么您必须将它们添加到清单中。

答案 1 :(得分:0)

我认为你犯了一个错误...... 您正在传递布局值而不是意图..

只需检查我的代码..您在 setContent(intent); 行中传递 R.layout.hafflayout 而非意图

<强>更新

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);

<强>更新

你没有在 menifest.xml

中的活动名称之前添加点(
<activity android:name=".HaffActivity">
</activity>

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

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

<强>更新...最新的

你在MapsActivity.class中的

setContentView(R.layout.main);所以请更改它并为MapActivity添加xml

答案 2 :(得分:0)

尝试清理项目。另外,您使用的是maps的Google图书馆吗?您需要添加指向Google API的链接。

答案 3 :(得分:0)

您是否在代码中实施了MapsActivity?我只能看到LocationActivity。