【发布时间】:2016-10-09 19:07:45
【问题描述】:
编辑:关于uses-permission is not allowed here 的消息不再出现。
我正在使用 Volley 访问谷歌图书,API 是冰淇淋三明治。即使包括对清单文件的权限,我仍然会收到有关权限的异常。我已经阅读了一些已回答的问题(this、this)。当光标指向uses-permission 时,表示此处不允许使用该标签。我该如何解决这个问题?
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alone.findgooglebook">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我使用Volley的函数
private void onSearchClicked() {
String bookName = editText.getText().toString();
String url = "https://www.googleapis.com/books/v1/volumes?q=" + bookName;
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError err)
{
Log.e(TAG, err.getMessage());
}
}
);
queue.add(request);
}
editText 已通过查找视图正确初始化。
Logcat:
06-09 04:43:58.895 9190-9364/com.example.alone.findgooglebook E/Volley:[114] NetworkDispatcher.run:未处理的异常 java.lang.SecurityException:权限被拒绝(缺少 INTERNET 允许?) java.lang.SecurityException:权限被拒绝(缺少 INTERNET 允许?) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:418) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 引起:libcore.io.GaiException:getaddrinfo 失败:EAI_NODATA(否 与主机名关联的地址) 在 libcore.io.Posix.getaddrinfo(本机方法) 在 libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:405) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 引起:libcore.io.ErrnoException:getaddrinfo 失败:EACCES (没有权限) 在 libcore.io.Posix.getaddrinfo(本机方法) 在 libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:405) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 06-09 04:43:58.903 9190-9190/com.example.alone.findgooglebook E/MainActivity:java.lang.SecurityException:权限被拒绝 (缺少 INTERNET 权限?)
【问题讨论】:
-
你的应用 compileSdkVersion 是什么?
-
是冰淇淋三明治,不记得编号了。我会编辑帖子
-
这是
<uses-permission>,而不是<user-permission>。使用s,不使用r。 -
@MikeM.,工作!谢谢你。最后一个问题:我应该留下帖子还是删除它,因为它的某个地方有错字?
-
@MikeM。我自己标记了,等待版主干预
标签: android android-studio permissions genymotion user-permissions