ClipData getPrimaryClipDescription()在Android 6.0.1中返回null

时间:2016-07-12 05:48:45

标签: android

if (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ||
            mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML))
在少数Android 6.0.1中,

getPrimaryClipDescription()为空。

Attempt to invoke virtual method 'boolean android.content.ClipDescription.hasMimeType(java.lang.String)' on a null object reference

更新

请尝试三星Galaxy S5和Note 4等设备。

3 个答案:

答案 0 :(得分:2)

我使用Genymotion模拟器在Galaxy S6 - 6.0.0图像上测试了此代码,但没有收到任何错误。

       // Copy to clipbaord
        ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
       // ClipData clip = ClipData.newPlainText("Label", "TEXT");
       // clipboard.setPrimaryClip(clip);

        if (clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ||
                clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML))
        {
            Log.d("Copied!", "Copied!");
        }

很少有建议:

  1. 检查mClipboard是否已实例化。
  2. 我使用ClipData剪辑和setPrimaryClip测试了代码 行评论和未评论没有错误。但是,你可以 如果您还没有这些行,请通过添加这些行来测试您的代码。
  3. hasMimeType()getPrimaryClipDescription()已经过了 从API 11开始添加到Android,因此三星没有理由 禁用它们(没有提供足够的错误消息)。
  4. 尝试在主代码之前添加此代码:

    if(!(mClipboard .hasPrimaryClip()))

    这将确保剪贴板具有您可以使用的主剪辑 处理

  5. 从Android网站查看此链接: https://developer.android.com/guide/topics/text/copy-paste.html它 有关复制和粘贴内容的良好信息和代码。

  6. 最后,请联系三星。你可以在三星上发一个问题 开发人员社区http://developer.samsung.com/community进行检查 问题的根源是因为这个问题特定于三星 设备

答案 1 :(得分:2)

在尝试该方法之前,您可以检查它是否具有PrimaryClip。

if(mClipboard.hasPrimaryClip()  && (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ||  mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)))

这可以是避免空指针异常的好方法。

答案 2 :(得分:1)

它在棉花糖中工作。我在运行棉花糖的Nexus 5上进行了测试。请分享您正在使用的设备。

以下是示例:

import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {
    EditText ed1,ed2;
    Button b1,b2;

    private ClipboardManager myClipboard;
    private ClipData myClip;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ed1=(EditText)findViewById(R.id.editText);
        ed2=(EditText)findViewById(R.id.editText2);

        b1=(Button)findViewById(R.id.button);
        b2=(Button)findViewById(R.id.button2);

        myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text;
                text = ed1.getText().toString();

                myClip = ClipData.newPlainText("text", text);
                myClipboard.setPrimaryClip(myClip);

                Toast.makeText(getApplicationContext(), "Text Copied",Toast.LENGTH_SHORT).show();
            }
        });

        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(myClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML) ||
                        myClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ) {
                    ClipData abc = myClipboard.getPrimaryClip();
                    ClipData.Item item = abc.getItemAt(0);

                    String text = item.getText().toString();
                    ed2.setText(text);

                    Toast.makeText(getApplicationContext(), "Text Pasted", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}