2016-07-12 4 views
4
if (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) || 
      mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)) 

getPrimaryClipDescription()は、Android 6.0.1がごくわずかです。ClipData getPrimaryClipDescription()は、Android 6.0.1でnullを返します。

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

更新

それはマシュマロで働いて4

+1

助けてください私の質問も同様にhttp://stackoverflow.com/questions/33535656/copying-data-giving-using-getprimaryclip-giving-text-plain-null – johnrao07

+0

@ johnrao07助けてください。 – mjosh

+0

これは+50の賞金で解決されています。さらに問題あります。別の賞金を追加してみてください:P – johnrao07

答えて

1

サムスンギャラクシーS5のようなデバイス上で試してみて、注意してください。私はNexus 5でmarshmallowを実行してテストしました。使用しているデバイスを共有してください。 - Genymotionエミュレータを使用して6.0.0画像と、私はすべてのエラーを受信しませんでした

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(); 
    } 
} 
+0

私はそれが三星のデバイス上にあることを明確に言及しました。 – mjosh

+0

私はSamsungデバイスを持っていません。誰かから借りて、テストしてみましょう。 – user6643124

2

私はギャラクシーS6でこのコードをテストした:ここで

は一例です。

 // 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()は、API11以降にAndroidに追加された です。したがって、サムスンが を無効にする理由はありません(十分なエラーメッセージを表示せずに)。
  4. はあなたのメインのコードの前にこのコードを追加してください:

    場合

    これは、クリップボードは、プライマリクリップすることができます ハンドルを持っていることを確認します((mClipboard .hasPrimaryClip())!)。 AndroidのWebサイトから

  5. チェックこのリンク: https://developer.android.com/guide/topics/text/copy-paste.htmlそれ のコピーと貼り付け、コンテンツの良い情報とコードを持っています。

  6. 最後に、サムスンにお問い合わせください。この問題は、サムスン デバイスに固有のものですので、あなたは、問題の ソースをチェックするためにサムスン 開発者コミュニティhttp://developer.samsung.com/communityに質問を投稿することができます。

+0

質問に記載されているデバイスのテスト – mjosh

2

その方法を試みる前に、あなたはそれがPrimaryClipを持っているかを確認することができます。

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

これは、ヌルポインタの例外を避けるための良い方法です。

関連する問題