2016-07-19 5 views
1

Ich stieß auf ein seltsames "Problem" oder vielleicht einen "Bug" in Android. Ich verwende den ClipboardManager für meine App ziemlich oft. Aber wenn ich es innerhalb von ein paar Sekunden zweimal benutze, bekomme ich immer eine NullPointerException. Was ich denke ist, dass ich Zwischenablage nicht bereits gefüllt ist, wenn ich darauf zugreifen, aber das scheint eine wirklich dumme Idee zu sein ... Hat jemand das gleiche Problem angetroffen, oder mache ich etwas falsch? Ich bekomme den Fehler bei String text = item.getText(). ToString();ClipData ist manchmal Null in Android

Fehlermeldung:

java.lang.NullPointerException: Versuch Interface-Methode 'java.lang.String java.lang.CharSequence.toString()' auf null Objektreferenz bei at.co.netconsulting aufzurufen .leotranslater.SettingsActivity $ 1 $ 3.onPrimaryClipChanged

Vielen Dank für jeden Hinweis oder Hilfe im Voraus! Hier

ist ein Stück von meinem Code:

final ClipboardManager myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
        myClipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { 
         @Override 
         public void onPrimaryClipChanged() { 
          ClipData cp = myClipboard.getPrimaryClip(); 
          if(cp.getItemCount()>0) { 
           ClipData.Item item = cp.getItemAt(0); 
           if (item == null) { 
            Toast.makeText(getApplicationContext(), "Item is null", Toast.LENGTH_LONG).show(); 
           } else { 
            if(item!=null) { 
             String text = item.getText().toString(); 
             Toast.makeText(getApplicationContext(), "Sie suchen nach dem Wort: " + text, Toast.LENGTH_LONG).show(); 
             Intent msgIntent = new Intent(SettingsActivity.this, ServiceTranslator.class); 
             msgIntent.putExtra("ClipBoardData", text); 
             startService(msgIntent); 
            } 
           } 
          } 
         } 
        }); 
       } 

Antwort

1

Ich denke, das die Lösung sein könnte.

String text = item.coerceToText(getBaseContext()).toString(); 

Blick in die Dokumentation, es wird gesagt, dass , wenn alles, was Sie wollen, dass die Text ist Datendarstellung der abgeschnitten, Sie * die bequeme Methode verwenden {@link Item # coerceToText Item.coerceToText}.

Ich hoffe, dass das mein Problem lösen wird!

Verwandte Themen