我有一个Main类和一个HelloWorld类。我在Main.xml中创建了一个按钮,当我单击此按钮时,它应该启动HelloWorld活动。当我执行它时,当我单击按钮时强制关闭。 Log cat也在下面给出。
Main.java
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class Main extends MapActivity implements LocationListener {
/** Called when the activity is first created. */
MapView map;
long start;
long stop;
int x, y;
GeoPoint touchedPoint;
Drawable d;
List<Overlay> overlayList;
LocationManager lm;
String towers;
int lat ;
int longi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast.makeText(Main.this, "you clicked on button!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Main.this, HelloWorld.class);
startActivity(intent)
}
});
map = (MapView)findViewById(R.id.mv);
map.setBuiltInZoomControls(true);
Touchy t = new Touchy();
overlayList = map.getOverlays();
overlayList.add(t);
d = getResources().getDrawable(R.drawable.pinn);
//Placing pintpoint
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
towers = lm.getBestProvider(crit, false);
Location location = lm.getLastKnownLocation(towers);
if (location != null){
lat = (int) (location.getLatitude() *1E6);
longi= (int) (location.getLongitude() *1E6);
GeoPoint ourLocation = new GeoPoint(lat,longi);
OverlayItem overlayItem = new OverlayItem(ourLocation, "Hi!!", "2nd");
CustomPinPoint custom = new CustomPinPoint(d, Main.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
}else{
Toast.makeText(Main.this, "Couldnt get provider", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
lm.removeUpdates(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
lm.requestLocationUpdates(towers, 500, 1, this );
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
class Touchy extends Overlay{
public boolean onTouchEvent(MotionEvent e, MapView m){
if (e.getAction() == MotionEvent.ACTION_DOWN){
start = e.getEventTime();
}
if (e.getAction() == MotionEvent.ACTION_UP){
stop = e.getEventTime();
x = (int) e.getX();
y = (int) e.getY();
touchedPoint = map.getProjection().fromPixels(x, y);
}
if (stop - start > 1500){
AlertDialog alert = new AlertDialog.Builder(Main.this).create();
alert.setTitle("Pick Option");
alert.setButton("Hello", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
OverlayItem overlayItem = new OverlayItem(touchedPoint, "Hi!!", "2nd");
CustomPinPoint custom = new CustomPinPoint(d, Main.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
}
});
alert.setButton3("Get Address", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Geocoder geocoder = new Geocoder(getBaseContext(), Locale.getDefault());
try{
List<Address> address = geocoder.getFromLocation(touchedPoint.getLatitudeE6() / 1E6, touchedPoint.getLongitudeE6() / 1E6 , 1);
if (address.size() > 0){
String display = "";
for (int i = 0; i<address.get(0).getMaxAddressLineIndex(); i++){
display += address.get(0).getAddressLine(i) + "\n";
}
Toast t = Toast.makeText(getBaseContext(), display, Toast.LENGTH_LONG);
t.show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
}});
alert.setButton2("Toggle View", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if (map.isSatellite()){
map.setSatellite(false);
map.setStreetView(true);
}else{
map.setStreetView(false);
map.setSatellite(true);
}
}
});
alert.setButton("Place a Pin", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
OverlayItem overlayItem = new OverlayItem(touchedPoint, "Hi!!", "2nd");
CustomPinPoint custom = new CustomPinPoint(d, Main.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
}
});
alert.show();
return true;
}
return false;
}
}
public void onLocationChanged(Location l) {
// TODO Auto-generated method stub
lat = (int) (l.getLatitude() *1E6);
longi = (int) (l.getLongitude() *1E6);
GeoPoint ourLocation = new GeoPoint(lat,longi);
OverlayItem overlayItem = new OverlayItem(ourLocation, "Hi!!", "2nd");
CustomPinPoint custom = new CustomPinPoint(d, Main.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
HelloWorld.java
import com.google.android.maps.OverlayItem;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class HelloWorld extends Activity
{
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Toast.makeText(HelloWorld.this, "you clicked on button![enter image description here][3]", Toast.LENGTH_LONG).show();
}
});
记录猫
04-04 22:56:21.623: W/dalvikvm(309): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-04 22:56:21.703: E/AndroidRuntime(309): FATAL EXCEPTION: main
04-04 22:56:21.703: E/AndroidRuntime(309): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mehul.googlemaps/com.mehul.googlemaps.HelloWorld}: android.view.InflateException: Binary XML file line #20: Error inflating class <unknown>
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.os.Handler.dispatchMessage(Handler.java:99)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.os.Looper.loop(Looper.java:123)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-04 22:56:21.703: E/AndroidRuntime(309): at java.lang.reflect.Method.invokeNative(Native Method)
04-04 22:56:21.703: E/AndroidRuntime(309): at java.lang.reflect.Method.invoke(Method.java:521)
04-04 22:56:21.703: E/AndroidRuntime(309): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-04 22:56:21.703: E/AndroidRuntime(309): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-04 22:56:21.703: E/AndroidRuntime(309): at dalvik.system.NativeStart.main(Native Method)
04-04 22:56:21.703: E/AndroidRuntime(309): Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class <unknown>
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
04-04 22:56:21.703: E/AndroidRuntime(309): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.Activity.setContentView(Activity.java:1647)
04-04 22:56:21.703: E/AndroidRuntime(309): at com.mehul.googlemaps.HelloWorld.onCreate(HelloWorld.java:20)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-04 22:56:21.703: E/AndroidRuntime(309): ... 11 more
04-04 22:56:21.703: E/AndroidRuntime(309): Caused by: java.lang.reflect.InvocationTargetException
04-04 22:56:21.703: E/AndroidRuntime(309): at com.google.android.maps.MapView.<init>(MapView.java:238)
04-04 22:56:21.703: E/AndroidRuntime(309): at java.lang.reflect.Constructor.constructNative(Native Method)
04-04 22:56:21.703: E/AndroidRuntime(309): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
04-04 22:56:21.703: E/AndroidRuntime(309): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
04-04 22:56:21.703: E/AndroidRuntime(309): ... 21 more
04-04 22:56:21.703: E/AndroidRuntime(309): Caused by: java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
04-04 22:56:21.703: E/AndroidRuntime(309): at com.google.android.maps.MapView.<init>(MapView.java:282)
04-04 22:56:21.703: E/AndroidRuntime(309): at com.google.android.maps.MapView.<init>(MapView.java:255)
04-04 22:56:21.703: E/AndroidRuntime(309): ... 25 more
如果还需要其他任何信息,请告知我......将会提出来。
答案 0 :(得分:0)
java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
错误消息对我来说非常清楚。包含MapView
的活动需要来自MapActivity
。
答案 1 :(得分:0)
这是你必须注意的logcat
04-04 22:56:21.703: E/AndroidRuntime(309): Caused by: java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
您可以使用以下
创建test.xml文件<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/hellotv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
并在你的HelloWorld中setContentView(R.layout.test);
答案 2 :(得分:0)
在Helloworld课程中,您使用的是setcontentView(r.layout.main);
并且您的main.xml具有地图视图。
并从代码中的以下行
public class HelloWorld extends Activity
您正在延伸到活动,因此应用程序正在崩溃。
使用下面的行代替上面的
public class HelloWorld extends MapActivity
或为HelloWorld.java创建一个新的布局文件..
多数民众赞成......