2

私は非常に奇妙な問題を抱えており、それが私を夢中にさせています。メイン スレッドのブロックを回避するために、AsyncTask からマップにマーカーを追加します。4.2.2 の Nexus 4 では正常に動作していますが、3.2 のタブレット Galaxy または 2.3.7 の Galaxy ace では、map.addMarker() を実行するとヌル ポインター例外が発生します。OnProgrssUpdate で MarkerOption を作成するとエラーが発生しないため、エラーは MarkerOption に対するものです。オブジェクトが null ではなく、そうでないことを確認します。addMarker の前に log.d を置いても、オブジェクトは正しいですが、エラーが発生しました。ここにコードがあります:

    private class MapItems extends AsyncTask<Void, Item, Void> {
        @Override
        protected Void doInBackground(Void... values) {
            int density = getResources().getDisplayMetrics().densityDpi;
            for (int companyId : companies) {
                try {
                    Company company = DBCompanies.getCompany(db_path,
                            GSSettings.DBCODE, companyId);
                    LatLng pos = new LatLng(company.getLatitude(),
                            company.getLongitude());
                    if (pos.latitude == 0 && pos.longitude == 0)
                        continue;

                    Subcategory subcategory = DBParameters.getSubcategory(
                            db_path, GSSettings.DBCODE, company
                                    .getSubcategoriesId()[0], Locale
                                    .getDefault().getLanguage());


    Bitmap bitmap;
                    if (subcategory.getMarker() != null
                            && subcategory.getMarker().length > 1)
                        bitmap = GSTools.getBitmapFromMDPI(
                                subcategory.getMarker(), density);
                    else
                        bitmap = GSTools.getBitmapFromMDPI(
                                subcategory0.getMarker(), density);

                    MarkerOptions markerOptions = new MarkerOptions()
                            .position(pos).anchor(0, 1)
                            .title(company.getName())
                            .snippet(subcategory.getName())
                    .icon(BitmapDescriptorFactory.fromBitmap(bitmap));
            Item item = new Item(markerOptions, company.getId());

            publishProgress(item);
        } catch (Exception e) {
        }
    }
    return null;
}
    @Override
    protected void onProgressUpdate(Item... values) {
        try {
            MarkerOptions markerOptions = values[0].markerOptions;
            Log.d("marker", markerOptions.getTitle());


    //              markerOptions = new MarkerOptions()
    //                      .position(new LatLng(37.750087, -0.848522))
    //                      .anchor(0, 1)
    //                      .title("TT")
    //                      .icon(BitmapDescriptorFactory
    //                              .fromResource(R.drawable.ic_button_map));
            Marker m = map.addMarker(markerOptions);
            haspMap.put(m, values[0].comapnyId);
            Log.d("marker", markerOptions.getTitle());

        } catch (Exception e) {
            Log.d("marker", e.toString());
        }

        super.onProgressUpdate(values);
    }
    }

MarkerOption を使用すると、コメント付きの作品が動作します。何か案が????

ありがとう。

4

1 に答える 1

1

使用してみてください:

mContext.runOnUiThread(new Runnable()
{
 public void run()
 {
    // add your marker here
    Marker m = map.addMarker(markerOptions);
    haspMap.put(m, company.getId());
    Log.d("marker", markerOptions.getTitle());

 }
});

UI を更新するために進行状況更新メカニズムを使用する代わりに。mContext はアクティビティ/コンテキストです

于 2013-06-21T17:57:16.670 に答える