ClipData getPrimaryClipDescription () devolver null en Android 6.0.1
if (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) || mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML))
getPrimaryClipDescription()
es nulo en algunos Android 6.0.1.
Attempt to invoke virtual method 'boolean android.content.ClipDescription.hasMimeType(java.lang.String)' on a null object reference
Actualizar
Intente dispositivos como Samsung Galaxy S5 y Note 4.
He probado este código en la imagen de Galaxy S6 – 6.0.0 con el emulador de Genymotion y no he recibido ningún error.
// 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!"); }
Pocas sugerencias:
- Compruebe que mClipboard se instancia.
- He probado el código con ClipData clip y setPrimaryClip líneas comentado y sin comentar sin errores. Sin embargo, puede probar su código agregando estas líneas si no las tiene ya.
- HasMimeType () y getPrimaryClipDescription () se han añadido a Android desde la API 11, por lo que no hay razón para que Samsung los deshabilite (sin proporcionar suficiente mensaje de error).
-
Intente agregar este código antes de su código principal:
If (! (MClipboard .hasPrimaryClip ()))
Esto asegurará que el portapapeles tiene un clip principal que puede manejar.
-
Compruebe este enlace desde el sitio web de Android: https://developer.android.com/guide/topics/text/copy-paste.html Tiene buena información y código para copiar y pegar contenido.
-
Por último, póngase en contacto con Samsung. Puedes publicar una pregunta en Samsung Developers Community http://developer.samsung.com/community para comprobar el origen del problema ya que este problema es específico de los dispositivos Samsung.
Antes de intentar ese método puede comprobar que tiene PrimaryClip o no.
if(mClipboard.hasPrimaryClip() && (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) || mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)))
Que puede ser una buena manera de evitar la excepción puntero nulo.
Está trabajando en el malvavisco. He probado en Nexus 5 corriendo malvavisco. Comparte el dispositivo que estás usando.
Aquí está el ejemplo:
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(); } }