首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getClipdata().GetItemCount()空指针异常

getClipdata().GetItemCount()空指针异常
EN

Stack Overflow用户
提问于 2018-07-23 04:38:30
回答 2查看 3.8K关注 0票数 2

标记问题为重复之前,请阅读以下问题.

因此,我尝试使用Intent.when从图片库中选择多个图像,我选择了多个图像,它工作正常,当我只选择一个图像时,它就会产生这个错误。我看起来就像每个NullPointer异常问题一样,但没有成功。

代码语言:javascript
运行
复制
FATAL EXCEPTION: main
              Process: com.blackhat.applocker, PID: 1892
              java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:10227 flg=0x1 }} to activity {com.blackhat.applocker/com.blackhat.applocker.ProtactGallery}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.ClipData.getItemCount()' on a null object reference
                  at android.app.ActivityThread.deliverResults(ActivityThread.java:3839)
                  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3882)
                  at android.app.ActivityThread.access$1300(ActivityThread.java:178)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1519)
                  at android.os.Handler.dispatchMessage(Handler.java:111)
                  at android.os.Looper.loop(Looper.java:194)
                  at android.app.ActivityThread.main(ActivityThread.java:5637)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:114)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.ClipData.getItemCount()' on a null object reference
                  at com.blackhat.applocker.ProtactGallery.onActivityResult(ProtactGallery.java:63)
                  at android.app.Activity.dispatchActivityResult(Activity.java:6302)
                  at android.app.ActivityThread.deliverResults(ActivityThread.java:3835)

这里是我用于意图的代码

代码语言:javascript
运行
复制
Intent intent = new Intent();
            intent.setType("image/*");
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent,"Select Picture"), 2);

,这里是图像的ActivityResult方法内容

代码语言:javascript
运行
复制
if(requestCode == 2){
        if(data.getClipData().getItemCount() == 1){
            Toast.makeText(this, "Only 1", Toast.LENGTH_SHORT).show();
        }else{
            for(int i=0;i<data.getClipData().getItemCount();i++){
                path.add(data.getClipData().getItemAt(i).getUri());
                Log.d("RjList",path.get(i).toString());
                Random rn=new Random();
                if(copyFileFromUri(this,data.getClipData().getItemAt(i).getUri(),String.valueOf(rn.nextInt(500)))){
                    Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

它适用于多个图像。

当我只选择一个图像时,为什么它不起作用??任何建议都会被采纳。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-24 03:28:48

根据泰勒的代码建议,您可以对一个图像使用getData()方法,但仍然会产生错误。因此,您所要做的就是检查data.getData()是否为空,同时检查请求代码是否为

代码语言:javascript
运行
复制
if(requestCode == 2 && data.getData() !=null){
        if(cd == null){
            path.add(data.getData());
            Random rn = new Random();
            if(copyFileFromUri(this,data.getData(),String.valueOf(rn.nextInt(500)))){
                Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();
            }

        }else{
            for(int i=0;i<data.getClipData().getItemCount();i++){
                path.add(data.getClipData().getItemAt(i).getUri());
                Log.d("RjList",path.get(i).toString());
                Random rn=new Random();
                if(copyFileFromUri(this,data.getClipData().getItemAt(i).getUri(),String.valueOf(rn.nextInt(500)))){
                    Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2018-07-23 04:50:16

我相信只有当有多个Uris要返回时才返回ClipData。当只有一个时,您可以通过getData获得它。你可以做一些这样的事情来解决这个问题:

代码语言:javascript
运行
复制
List<Uri> uris = new ArrayList<>();
ClipData cd = data.getClipData();

if ( cd == null ) {  
    Uri uri = data.getData();  
    uris.add(uri);  
} 
else {
    for (int i = 0; i < cd.getItemCount(); i++) {  
        ClipData.Item item = cd.getItemAt(i);  
        Uri uri = item.getUri();  
        uris.add(uri);  
    }  
} 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51471647

复制
相关文章

相似问题

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