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等设备。
答案 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!");
}
很少有建议:
尝试在主代码之前添加此代码:
if(!(mClipboard .hasPrimaryClip()))
这将确保剪贴板具有您可以使用的主剪辑 处理
从Android网站查看此链接: https://developer.android.com/guide/topics/text/copy-paste.html它 有关复制和粘贴内容的良好信息和代码。
最后,请联系三星。你可以在三星上发一个问题 开发人员社区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();
}
}