2012-04-04 170 views
0

我有一個主類和一個HelloWorld類。我在Main.xml中創建了一個按鈕,當我點擊這個按鈕時它應該啓動HelloWorld活動。當我執行它時,它會在我單擊按鈕時關閉。日誌貓也在下面給出。我如何從一項活動轉到另一項活動?

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

結帳你的XML佈局文件,如果你有 – pleerock 2012-04-04 17:40:37

+0

沒有得到解決方案,然後用xml編輯帖子 – 2012-04-04 17:52:18

回答

0

這裏是你必須注意

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的logcat的做setContentView(R.layout.test);

0
java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity. 

錯誤信息對我來說似乎很清楚。包含MapView的活動需要來自MapActivity

0

在Helloworld類中,您正在使用setcontentView(r.layout.main);

和你的main.xml有地圖視圖。

,並從下面的一行代碼中的

public class HelloWorld extends Activity 

你是延伸到活動,因此該應用是越來越墜毀。

線下方,而不是上方

public class HelloWorld extends MapActivity 

或創建HelloWorld.java一個新的佈局文件使用..

完蛋了......

+0

如果我從Activity更改爲MapActivity,它會在代碼的其餘部分給出錯誤 – 2012-04-04 18:19:33

相關問題