Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android,Glide图像加载库:NullPointerException,ProviderInfo_Java_Android_Nullpointerexception_Android Glide - Fatal编程技术网

Java Android,Glide图像加载库:NullPointerException,ProviderInfo

Java Android,Glide图像加载库:NullPointerException,ProviderInfo,java,android,nullpointerexception,android-glide,Java,Android,Nullpointerexception,Android Glide,刚刚进入Android的Glide图像加载库。目前正在使用以下代码: 我的完整项目在这里,你想看看它: 当我在Android Studio的emulator中运行应用程序时,出现以下异常: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(a

刚刚进入Android的Glide图像加载库。目前正在使用以下代码:

我的完整项目在这里,你想看看它:

当我在Android Studio的emulator中运行应用程序时,出现以下异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
这是MainActivity中的关键语句:

new ShareTask(this).execute("http://thelink");
thelink
实际上是
goo.gl/gEgYUd
——无法将其保留在上面,因为stackoverflow不允许URL缩短器。)

这是我的ShareTask类代码

class ShareTask extends AsyncTask<String, Void, File> {
    private final Context context;

    public ShareTask(Context context) {
        this.context = context;
    }
    @Override protected File doInBackground(String... params) {
        String url = params[0]; // should be easy to extend to share multiple images at once
        try {
            return Glide
                    .with(context)
                    .load(url)
                    .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .get() // needs to be called on background thread
                    ;
        } catch (Exception ex) {
            Log.w("SHARE", "Sharing " + url + " failed", ex);
            return null;
        }
    }
    @Override protected void onPostExecute(File result) {
        if (result == null) { return; }
        Uri uri = FileProvider.getUriForFile(context, context.getPackageName(), result);
        share(uri); // startActivity probably needs UI thread
    }

    private void share(Uri result) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/jpeg");
        intent.putExtra(Intent.EXTRA_SUBJECT, "Shared image");
        intent.putExtra(Intent.EXTRA_TEXT, "Look what I found!");
        intent.putExtra(Intent.EXTRA_STREAM, result);
        context.startActivity(Intent.createChooser(intent, "Share image"));
    }
}
class ShareTask扩展了AsyncTask{
私人最终语境;
公共共享任务(上下文){
this.context=上下文;
}
@覆盖受保护的文件doInBackground(字符串…参数){
字符串url=params[0];//应该易于扩展,以便一次共享多个图像
试一试{
回程滑翔
.与(上下文)
.load(url)
.仅下载(Target.SIZE_原件,Target.SIZE_原件)
.get()//需要在后台线程上调用
;
}捕获(例外情况除外){
Log.w(“共享”、“共享”+url+“失败”,ex);
返回null;
}
}
@重写受保护的void onPostExecute(文件结果){
如果(result==null){return;}
Uri=FileProvider.getUriForFile(上下文,context.getPackageName(),结果);
共享(uri);//startActivity可能需要UI线程
}
私有无效共享(Uri结果){
意向意向=新意向(意向.行动\发送);
intent.setType(“图像/jpeg”);
intent.putExtra(intent.EXTRA_主题,“共享图像”);
intent.putExtra(intent.EXTRA_文本,“看看我发现了什么!”);
intent.putExtra(intent.EXTRA_流,结果);
context.startActivity(Intent.createChooser(Intent,“共享图像”));
}
}
使用debug,我似乎在
get()
语句中遇到了麻烦。首先,宽度和高度是非常大的负数。(请参阅下面以绿色突出显示的代码。)然后
get()
语句返回
null
。(请参见下面以红色突出显示的代码。)

提前感谢您提供的任何帮助


NPE来自
文件提供程序.getUriForFile
,因为您传递了错误的权限。您在清单中声明了
android:authorities=“com.example.fileprovider”
,但在调用时使用了包名。这无法解析
FileProvider.parsePathStrategy
中的
info
。把这两条线连起来,你就可以走了

最简单的修复方法是使用
android:authorities=“${applicationId}”
,这将导致0个硬编码字符串,因此您可以继续使用
context.getPackageName()

关于调试期间的问题:

  • Target.SIZE\u ORIGINAL
    声明为
    MIN\u值
    ,因此该数字较大
  • 它没有返回
    null
    ,只是混淆了它在方法中的位置,
    返回null文件提供程序中失败,则不应执行code>
  • doGet(null)
    null
    是这里的超时,它在代码中得到了正确的保护
我运行了这个应用程序,奇怪的是我收到了一条日志,上面写着

W/共享:共享http://... 失败


但不是堆栈跟踪,这很奇怪,因为
ex
catch
中不能
null

NPE来自
FileProvider.getUriForFile
,因为您传递了错误的权限。您在清单中声明了
android:authorities=“com.example.fileprovider”
,但在调用时使用了包名。这无法解析
FileProvider.parsePathStrategy
中的
info
。把这两条线连起来,你就可以走了

最简单的修复方法是使用
android:authorities=“${applicationId}”
,这将导致0个硬编码字符串,因此您可以继续使用
context.getPackageName()

关于调试期间的问题:

  • Target.SIZE\u ORIGINAL
    声明为
    MIN\u值
    ,因此该数字较大
  • 它没有返回
    null
    ,只是混淆了它在方法中的位置,
    返回null文件提供程序中失败,则不应执行code>
  • doGet(null)
    null
    是这里的超时,它在代码中得到了正确的保护
我运行了这个应用程序,奇怪的是我收到了一条日志,上面写着

W/共享:共享http://... 失败


但不是堆栈跟踪,这很奇怪,因为
ex
catch
中不能
null

请提供更多日志可能的副本请提供更多日志可能的副本谢谢,@TWiStErRob-这确实解决了这个问题。但是,我现在得到了IllegalArgumentException:找不到包含/data/data/的配置根目录。这里的细节:谢谢,@TWiStErRob-这确实解决了这个问题。但是,我现在得到了IllegalArgumentException:找不到包含/data/data/的配置根目录。详情如下: