エラーレポートを理解するためにいくつかの助けを求めます。私は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は、そこに何も起こりません。私は推測していますが、おそらく...
あなたのコードも投稿してください。 –
私のラップトップを取得するには、ちょっと質問を編集してください。 – hundeva
Google Mapsアドオンのバグのようです。 – CommonsWare