2014-07-18 1 views
1

연습을 위해 WebView에서 클립 보드에 복사 한 단어를 토스트하는 응용 프로그램을 만들려고합니다. 문제는이 코드가 첫 번째 단어에 대해 작동한다는 것입니다 (아무 래도 3 회 토스트를 제외하고는 깜박임). 그러나 두 번째 단어를 복사하려고하면 "Unfortunately, (my app's name) has stopped" 이 표시되고 작동을 멈 춥니 다. 웹 사이트는 여전히 표시되지만 토스트 기능은 중지됩니다. 나는이 프로그램을 에뮬레이터에서 Eclipse를 사용하여 실행하고있다. Mr/Ms.jgriffsta의 조언에 뒤따라 try & catch 문을 추가 한 다음 두 번째로 "오류가 발생했습니다"라는 메시지를 두 번 토스트 한 다음 복사 된 단어를 두 번 토스트합니다. 다시 한번 깜박입니다.OnPrimaryClipChangedListener()는 한 번만 작동합니다.

//ItemDetailActivity.java 
public class ItemDetailActivity extends Activity { 
    private WebView mWeb; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.item_detail); 

     Intent intent = getIntent(); 

     String link = intent.getStringExtra("LINK"); 
     mWeb = (WebView)findViewById(R.id.web); 
     mWeb.loadUrl(link); 

     final ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
     cm.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener(){ 
      @Override 
      public void onPrimaryClipChanged(){ 
       ClipData.Item item = cm.getPrimaryClip().getItemAt(0); 
       String text = item.getText().toString(); 
       Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

---- 로그 캣 --------

07-18 18:15:07.530: E/chromium(837): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. 
07-18 18:15:07.540: E/chromium(837): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. 
07-18 18:15:07.540: E/chromium(837): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. 
07-18 18:15:07.540: E/chromium(837): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. 
07-18 18:15:07.540: E/chromium(837): [ERROR:gpu_info_collector.cc(86)] gfx::GLSurface::InitializeOneOff() failed 
07-18 18:15:10.360: E/chromium(837): [ERROR:simple_backend_impl.cc(186)] File structure does not match the disk cache backend. 
07-18 18:15:10.360: E/chromium(837): [ERROR:simple_backend_impl.cc(402)] Simple Cache Backend: wrong file structure on disk: /data/data/com.kariga.rssreader1/app_webview/Cache 
07-18 18:16:03.910: E/AndroidRuntime(837): FATAL EXCEPTION: main 
07-18 18:16:03.910: E/AndroidRuntime(837): Process: com.kariga.rssreader1, PID: 837 
07-18 18:16:03.910: E/AndroidRuntime(837): java.lang.NullPointerException 
07-18 18:16:03.910: E/AndroidRuntime(837): at com.kariga.rssreader1.ItemDetailActivity$1.onPrimaryClipChanged(ItemDetailActivity.java:34) 
07-18 18:16:03.910: E/AndroidRuntime(837): at android.content.ClipboardManager.reportPrimaryClipChanged(ClipboardManager.java:234) 
07-18 18:16:03.910: E/AndroidRuntime(837): at android.content.ClipboardManager$2.handleMessage(ClipboardManager.java:76) 
07-18 18:16:03.910: E/AndroidRuntime(837): at android.os.Handler.dispatchMessage(Handler.java:102) 
07-18 18:16:03.910: E/AndroidRuntime(837): at android.os.Looper.loop(Looper.java:136) 
07-18 18:16:03.910: E/AndroidRuntime(837): at android.app.ActivityThread.main(ActivityThread.java:5017) 
07-18 18:16:03.910: E/AndroidRuntime(837): at java.lang.reflect.Method.invokeNative(Native Method) 
07-18 18:16:03.910: E/AndroidRuntime(837): at java.lang.reflect.Method.invoke(Method.java:515) 
07-18 18:16:03.910: E/AndroidRuntime(837): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
07-18 18:16:03.910: E/AndroidRuntime(837): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
07-18 18:16:03.910: E/AndroidRuntime(837): at dalvik.system.NativeStart.main(Native Method) 

---- 편집 코드로 -------- & catch 문을 시도

final ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
cm.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener(){ 
    @Override 
    public void onPrimaryClipChanged(){ 
     ClipData.Item item = cm.getPrimaryClip().getItemAt(0); 
     try{String text = item.getText().toString(); 
      Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); 
     } 
     catch(Exception e){ 
      Toast.makeText(getApplicationContext(), "Error occured", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}); 

---- 판 후 로그 캣 --------

07-18 18:57:28.780: E/chromium(882): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. 
07-18 18:57:28.780: E/chromium(882): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. 
07-18 18:57:28.790: E/chromium(882): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. 
07-18 18:57:28.790: E/chromium(882): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. 
07-18 18:57:28.790: E/chromium(882): [ERROR:gpu_info_collector.cc(86)] gfx::GLSurface::InitializeOneOff() failed 

답변

0

(둘 것 이

당신은 어떤 예외를 확인하지 않는, 그래서

String text = item.getText().toString(); 

당신이 로그 캣에 오류 보고서를 게시 할 수 없습니다에 시도, 캐치 한 Statment을 둘 것) 내가 할 수있는 경우 주석으로. 정확한 이유를 지적해야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 logcat에 보고서를 추가했습니다. 파일 구조에 또 다른 문제가있는 것 같습니다. 어쨌든, 나는 try & catch 문을 쓸 것이다. – user3850893

관련 문제