首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Osmdroid没有显示地图

Osmdroid没有显示地图
EN

Stack Overflow用户
提问于 2020-05-26 17:09:56
回答 1查看 459关注 0票数 0

我刚开始使用osmdroid,所以我遵循了教程,以便显示地图,但是我总是在Logcat中看到这个错误:

代码语言:javascript
运行
复制
 E/SQLiteDatabase: Failed to open database '/storage/emulated/0/cache.db'.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database

我授予了所有需要的权限,但我不知道如何解决这个问题。

这是我的代码:

1.XML:

代码语言:javascript
运行
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <org.osmdroid.views.MapView android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>
  1. 活动
代码语言:javascript
运行
复制
public class MainActivity extends AppCompatActivity {

    private final String[] Permisos = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        IConfigurationProvider provider = Configuration.getInstance();
        provider.setUserAgentValue(BuildConfig.APPLICATION_ID);

        provider.setOsmdroidBasePath(getStorage());
        provider.setOsmdroidTileCache(getStorage());

        setContentView(R.layout.activity_main);

        if(!hasPermissions(this, Permisos)){
            Toast.makeText(this, "pidiendolo desde main", Toast.LENGTH_SHORT).show();
            ActivityCompat.requestPermissions(this, Permisos, 1);
        }

        //Configuration.getInstance().setUserAgentValue("github-firefishy-map/0.1");

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        MapView map = (MapView) findViewById(R.id.map);
        map.setTileSource(TileSourceFactory.MAPNIK);
        map.setBuiltInZoomControls(true);
        map.setMultiTouchControls(true);

        GeoPoint startPoint = new GeoPoint(48.13, -1.63);
        IMapController mapController = map.getController();
        mapController.setZoom(9);
        mapController.setCenter(startPoint);
    }

    private static boolean hasPermissions(Context context, String... permisos){
        if(context!=null && permisos!=null){
            for(String permiso: permisos){
                if(ActivityCompat.checkSelfPermission(context, permiso) != PackageManager.PERMISSION_GRANTED){
                    return false;
                }
            }
        }
        return true;
    }
}

3.明示许可:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

4.Gradle依赖项(在libs目录中包含了“osmbonuspack_6.6.0”库):

代码语言:javascript
运行
复制
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'org.osmdroid:osmdroid-android:6.1.0'
    implementation 'org.osmdroid:osmdroid-wms:6.0.1'
    implementation 'org.osmdroid:osmdroid-mapsforge:6.0.1'
    implementation 'org.osmdroid:osmdroid-geopackage:6.0.1'
    implementation (name:'osmbonuspack_6.6.0', ext:'aar')
    implementation 'org.apache.commons:commons-lang3:3.4'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.squareup.okhttp3:okhttp:3.14.4'
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-26 19:02:30

解决了!

我刚换了

代码语言:javascript
运行
复制
 IConfigurationProvider provider = Configuration.getInstance();
        provider.setUserAgentValue(BuildConfig.APPLICATION_ID);

        provider.setOsmdroidBasePath(getStorage());
        provider.setOsmdroidTileCache(getStorage());

在onCreate中:

代码语言:javascript
运行
复制
        Context ctx = getApplicationContext();
        Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));

而且起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62027673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档