net::ERR_CACHE_MISS : cannot load external URL's in Cordova Android

net::ERR_CACHE_MISS : cannot load external URL's in Cordova Android

If you try to execute the most normal ajax tasks in your project and you cannot load any external resource (internet images,files etc.) because you'll find that stupid issue net::ERR_CACHE_MISS, then you're in the right place if you want to solve it quickly. This error is pretty common and the reason is indeed, very stupid.

We don't have access to internet ! therefore we need to ask for the right permission from our AndroidManifest.xml file. However we will not make the changes directly in the AndroidManifest.xml file, instead we will add it in the config.xml using the cordova-custom-config plugin as a good practice.

Adding internet permissions

Although if you use the whitelist plugin, this should automatically the permission for you. Try to remove all the plugins of your projects, remove the android platform and add it again (including the plugins) and that should solve the problem. Remember that you should do this only if you use a plugin that should already add the permission (like cordova-plugin-whitelist).

However, there are always exceptions, if this is your case, you'll need to make some changes to your config.xml file. But you cannot simply add the permission in the config.xml as it will not work.

To add permissions, you'll need to install the following plugin : cordova-custom-config. This plugin will allow you to add any kind of configuration to your AndroidManifest.xml file from your config.xml (you can add directly the permissions in the AndroidManifest.xml file, however this is not a good practice as you'll lose all the changes on every build). To install the plugin use :

cordova plugin add cordova-custom-config
# Or if you're using phonegap
phonegap plugin add cordova-custom-config

After the installation, only add the following lines into your config.xml file :

<!-- Note that the lines needs to be inside the android platform -->
<platform name="android">
   <config-file target="AndroidManifest.xml" parent="/*">
      <uses-permission android:name="android.permission.INTERNET" />
      <!-- And if you need more things about the internet
         <uses-permission android:name="android.permissions.NETWORK_ACCESS" />
         <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      -->
   </config-file>
</platform>

Now build your app again and try to execute an external request, everything should be working normally now. Have fun

Become a more social person