2012-03-09 13 views
1

エラーレポートを理解するためにいくつかの助けを求めます。私はAndroidマーケットにアップロードされたアプリを持っています。つまり、Google Playの誕生日と呼ばれ、ユーザーの1人が強制終了して「レポート」ボタンが押されたので、私は彼のレポートを受け取りました。私が知っている何を:MapActivityからの奇妙なエラー報告

  • それは私のアプリ
  • のMapActivityから来なければならない、私はレポートの時点でマップ
  • 上のカスタムマーカーを持って、サイトがダウンし、私がフェッチする場所からかもしれませんマーカーのデータなので、レポート時に0の生きているマーカーがあった可能性があります。
  • 私の側にはnullポインタエラーがないと思いますが、私はすべてそれをカバーしていると思います。
  • 最大マーカーの数は1です(これは今のところ馬鹿しく聞こえます、将来私はそれを変更するので、fiですアプリケーションが複数のマーカーを扱うことができる)
  • エラーレポートに私のコードへの参照が含まれていないStacktraceがアンドロイドマップを指しています
  • 私は理解しているところから、確か

述べたスタックトレースカントー:

java.lang.NullPointerException 
at android.graphics.Canvas.<init>(Canvas.java:82) 
at com.google.android.maps.ZoomHelper.createSnapshot(ZoomHelper.java:447) 
at com.google.android.maps.ZoomHelper.doZoom(ZoomHelper.java:151) 
at com.google.android.maps.ZoomHelper.doZoom(ZoomHelper.java:140) 
at com.google.android.maps.MapView.doZoom(MapView.java:1478) 
at com.google.android.maps.MapView.doZoom(MapView.java:1487) 
at com.google.android.maps.MapView$6.onZoom(MapView.java:1442) 
at android.widget.ZoomButtonsController$3.onClick(ZoomButtonsController.java:268) 
at android.view.View.performClick(View.java:2420) 
at android.view.View$PerformClick.run(View.java:8844) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4627) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
at dalvik.system.NativeStart.main(Native Method) 

私はそれはまだバグ私、2000〜ユーザーからのこの1つのレポートが唯一存在してもカントー、何をすべきか見当がつかない、と私はしたいと思いますそれをカバーして、新しいことを学ぶのはいつも良いです。一日の終わりに。 :)私のコードから

一部抜粋:

これは私が地図の作成方法です:マップを作成した後

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map); 

    isCentered=false; 

    map = (MapView)findViewById(R.id.map_view); 

    map=(MapView)findViewById(R.id.map_view); 
    map.setBuiltInZoomControls(true); 

    extras = this.getIntent().getExtras(); 
    if(extras!=null) code=extras.getString("code"); 

    if(!isOnline()) 
    { 
     Toast.makeText(this, "Aktív internetkapcsolat szükséges!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

    refreshTrain(); 
} 

を、refreshTrain()メソッドからデータをフェッチAsyncTaskを開始しますウェブサイト、およびこのようなonPostExecute(ボイドのparam)におけるマーカー設定:

protected void onPostExecute(Void param) 
    { 
     try 
     { 
      if(result.length()<10) //the site is offline or the request is not valid 
      { 
       Toast.makeText(ctx, "Nem érhetőek el a térképadatok, próbáld később...", Toast.LENGTH_SHORT).show(); 
       return; 
      } 
      JSONObject json = new JSONObject(result); //parse the result and set up the coordinates 
      latitude=json.getString("lat"); 
      longitude=json.getString("lon"); 
      double _lat=Double.parseDouble(latitude); 
      double _lon=Double.parseDouble(longitude); 
      int lat=(int)(_lat*1E6); 
      int lon=(int)(_lon*1E6); 

      event_time=getJson(json, "event_time"); //get additional informations about the train 
      start_station=getJson(json, "start_station"); 
      end_station=getJson(json, "end_station"); 

      MapController mc = map.getController(); //set the markers 
      List<Overlay> list = map.getOverlays(); 
      list.clear(); 
      Drawable drawable = getResources().getDrawable(R.drawable.pin); 
      Markers markers = new Markers(drawable); 
      GeoPoint p = new GeoPoint(lat, lon); 
      OverlayItem item = new OverlayItem(p, "vonat", "snippet"); 
      markers.addOverlayItem(item); 
      mc.setCenter(p); 
      mc.animateTo(p); 
      if(!isCentered) //dont change the zoom after each refresh, only on the first creation 
      { 
       mc.setZoom(12); 
       isCentered=true; 
      } 

      list.add(markers); 
     } 
     catch(JSONException e) 
     { 
      Log.e(TAG,e.getMessage()); 
     } 

    } 
} 

は最後に、私のマーカーのクラスは次のように探しています:

をの
private class Markers extends com.google.android.maps.ItemizedOverlay<OverlayItem> { 
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

    public Markers(Drawable defaultMarker) { 
     super(boundCenter(defaultMarker)); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 

    public void addOverlayItem(OverlayItem item) 
    { 
     mOverlays.add(item); 
     populate(); 
    } 

    @Override 
    protected boolean onTap(int index) { //display the additional infos on tap 
     AlertDialog.Builder dialog = new AlertDialog.Builder(ctx); 
     dialog.setTitle("Frissítve: "+event_time); 
     dialog.setMessage(start_station+" \u2192 "+end_station); 
     dialog.show(); 
     return true; 
    } 

} 

歓声

編集:コードは

EDIT2を追加しました:私はエラーがトーストメッセージから来ることができ、これまでに(必ず何も)見つけたものから。エラー時には、アクティブな接続(onCreateにisOnline()はありません)があるかどうかをチェックし、サイトが利用できない場合は通知しません。したがって、Toastの場合は、 onPreExecute()メソッドで起動されたAsyncTaskのrefreshing thingieは、そこに何も起こりません。私は推測していますが、おそらく...

+0

あなたのコードも投稿してください。 –

+0

私のラップトップを取得するには、ちょっと質問を編集してください。 – hundeva

+0

Google Mapsアドオンのバグのようです。 – CommonsWare

答えて

0

このエラーは決して再び現れなかったので、私は問題ではないと考えています。