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:

  1. Compruebe que mClipboard se instancia.
  2. 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.
  3. 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).
  4. 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.

  5. 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.

  6. 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(); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.