简单的android程序无法正常工作

时间:2018-01-31 15:38:27

标签: java android

期望:

如果'edittext'有一些文字,则在1秒后将其复制到剪贴板。 当按下“按钮”时也复制到剪贴板。

现实:

等待键入的文本被复制到剪贴板但没有发生, 按下按钮时复制效果很好。

代码:

  

包com.quickclip.panky.quickclip;

     

import android.content.ClipData;进口   android.content.ClipboardManager; import android.content.Context;   import android.support.v7.app.AppCompatActivity;进口   android.os.Bundle; import android.view.View;进口   android.widget.Button; import android.widget.EditText;

     

公共类MainActivity扩展了AppCompatActivity实现   View.OnClickListener {

EditText e1;
Button b1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    e1 = (EditText) findViewById(R.id.editText);
    b1 = (Button) findViewById(R.id.button);

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) { copyMethod(); }
    });

    Runnable myRunnable = new Runnable() {
        @Override
        public void run() {
            while (true) {
                try { Thread.sleep(1000); }
                catch (InterruptedException e) { e.printStackTrace(); }
                Runnable newRunnable = new Runnable() {
                    @Override
                    public void run() { copyMethod(); }
                };
            }
        }
    };

    Thread myThread = new Thread(myRunnable);
    myThread.start();
}

public void copyText(View view) { copyMethod(); }

public void copyMethod()
{
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("Copied Text", (CharSequence) e1.getText().toString());
        if (clipboard != null) { clipboard.setPrimaryClip(clip); }
        e1.setText("");
}

@Override
public void onClick(View view) { copyMethod(); } }

XML:

<?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.quickclip.panky.quickclip.MainActivity">


    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:ems="100"
        android:inputType="textAutoCorrect" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText"
        android:layout_centerHorizontal="true"
        android:onClick="copyText"
        android:text="Copy" />

</android.widget.RelativeLayout>

logcat的:

01-31 20:58:49.951 11883-11883/com.quickclip.panky.quickclip I/art: Late-enabling -Xcheck:jni
01-31 20:58:50.262 11883-11883/com.quickclip.panky.quickclip W/System: ClassLoader referenced unknown path: /data/app/com.quickclip.panky.quickclip-1/lib/arm64
01-31 20:58:50.264 11883-11883/com.quickclip.panky.quickclip D/ActivityThread: installProvider: context.getPackageName()=com.quickclip.panky.quickclip
01-31 20:58:50.267 11883-11883/com.quickclip.panky.quickclip I/InstantRun: starting instant run server: is main process
01-31 20:58:50.398 11883-11883/com.quickclip.panky.quickclip W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
01-31 20:58:50.447 11883-11883/com.quickclip.panky.quickclip D/PhoneWindow: DEBUG_SYSTEMUI:origin statusbar style 
01-31 20:58:50.447 11883-11883/com.quickclip.panky.quickclip D/PhoneWindow: DEBUG_SYSTEMUI:windowDrawsFlag set
01-31 20:58:50.447 11883-11883/com.quickclip.panky.quickclip D/PhoneWindow: DEBUG_SYSTEMUI:IconColor=1
01-31 20:58:50.447 11883-11883/com.quickclip.panky.quickclip D/PhoneWindow: DEBUG_SYSTEMUI:StatusBarColor final set ff303f9f
01-31 20:58:50.631 11883-11883/com.quickclip.panky.quickclip V/PhoneWindow: DecorView setVisiblity: visibility = 4 ,Parent =null, this =com.android.internal.policy.PhoneWindow$DecorView{19bf69f I.E...... R.....ID 0,0-0,0}
01-31 20:58:50.637 11883-11883/com.quickclip.panky.quickclip D/WindowClient: Add to mViews: com.android.internal.policy.PhoneWindow$DecorView{19bf69f I.E...... R.....ID 0,0-0,0}, this = android.view.WindowManagerGlobal@143e3bd
01-31 20:58:50.638 11883-11883/com.quickclip.panky.quickclip D/OpenGLRenderer: Dumper init 4 threads <0x7fa0c7f5c0>
01-31 20:58:50.638 11883-11883/com.quickclip.panky.quickclip D/OpenGLRenderer: <com.quickclip.panky.quickclip> is running.
01-31 20:58:50.640 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
01-31 20:58:50.641 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CanvasContext() 0x7fa3a46000
01-31 20:58:50.644 11883-11883/com.quickclip.panky.quickclip D/ViewRootImpl: hardware acceleration is enabled, this = ViewRoot{a79bdb2 com.quickclip.panky.quickclip/com.quickclip.panky.quickclip.MainActivity,ident = 0}
01-31 20:58:50.648 11883-11883/com.quickclip.panky.quickclip V/PhoneWindow: DecorView setVisiblity: visibility = 0 ,Parent =ViewRoot{a79bdb2 com.quickclip.panky.quickclip/com.quickclip.panky.quickclip.MainActivity,ident = 0}, this =com.android.internal.policy.PhoneWindow$DecorView{19bf69f V.E...... R.....ID 0,0-0,0}
01-31 20:58:50.690 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CanvasContext() 0x7fa3a46000 initialize window=0x7fac9df010, title=com.quickclip.panky.quickclip/com.quickclip.panky.quickclip.MainActivity
01-31 20:58:50.690 11883-11883/com.quickclip.panky.quickclip D/Surface: Surface::allocateBuffers(this=0x7fac9df000)
01-31 20:58:50.696 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: Initialized EGL, version 1.4
01-31 20:58:50.699 11883-11902/com.quickclip.panky.quickclip D/MALI: gles_context_new:265: [MTK] sufficient memory..
01-31 20:58:50.699 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: Created EGL context (0x7fa4672f80)
01-31 20:58:50.701 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: Get enable program binary service property (1)
01-31 20:58:50.701 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: Initializing program atlas...
01-31 20:58:50.702 11883-11902/com.quickclip.panky.quickclip D/ProgramBinary/Service: BpProgramBinaryService.getFileDescriptor
01-31 20:58:50.703 11883-11902/com.quickclip.panky.quickclip D/ProgramBinary/Service: BpProgramBinaryService.getProgramMapLen
01-31 20:58:50.703 11883-11902/com.quickclip.panky.quickclip D/ProgramBinary/Service: BpProgramBinaryService.getProgramMapArray
01-31 20:58:50.703 11883-11902/com.quickclip.panky.quickclip D/ProgramBinary/Service: BpProgramBinaryService.getProgramBinaryLen
01-31 20:58:50.704 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: Program binary detail: Binary length is 173520, program map length is 152.
01-31 20:58:50.704 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: Succeeded to mmap program binaries. File descriptor is 47, and path is /dev/ashmem.
01-31 20:58:50.704 11883-11902/com.quickclip.panky.quickclip I/OpenGLRenderer: No need to use file discriptor anymore, close fd(47).
01-31 20:58:50.704 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: Initializing program cache from 0x7fb1123bc8, size = 6
01-31 20:58:50.707 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- init (key = 0x0000000000000000)
01-31 20:58:50.707 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- not init (key = 0x0000000000500040)
01-31 20:58:50.708 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- init (key = 0x0000000000500041)
01-31 20:58:50.710 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- init (key = 0x0000000800000003)
01-31 20:58:50.711 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- init (key = 0x0000001000500040)
01-31 20:58:50.713 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: -- init (key = 0x0000003800000000)
01-31 20:58:50.713 11883-11902/com.quickclip.panky.quickclip D/Surface: Surface::connect(this=0x7fac9df000,api=1)
01-31 20:58:50.714 11883-11902/com.quickclip.panky.quickclip W/libEGL: [ANDROID_RECORDABLE] format: 1
01-31 20:58:50.715 11883-11902/com.quickclip.panky.quickclip D/mali_winsys: new_window_surface returns 0x3000
01-31 20:58:50.747 11883-11883/com.quickclip.panky.quickclip W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
01-31 20:58:50.779 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 0, 0, 97, 148
01-31 20:58:50.786 11883-11902/com.quickclip.panky.quickclip I/[MALI][Gralloc]: [+]r_hnd(0x7fa4675440), client(51), share_fd(49)
01-31 20:58:50.786 11883-11902/com.quickclip.panky.quickclip D/GraphicBuffer: register, handle(0x7fa4675440) (w:720 h:1280 s:720 f:0x1 u:0x000b00)
01-31 20:58:50.790 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: ProgramCache save to disk, size = 6
01-31 20:58:50.801 11883-11902/com.quickclip.panky.quickclip I/[MALI][Gralloc]: [+]r_hnd(0x7fa4675120), client(51), share_fd(53)
01-31 20:58:50.801 11883-11902/com.quickclip.panky.quickclip D/GraphicBuffer: register, handle(0x7fa4675120) (w:720 h:1280 s:720 f:0x1 u:0x000b00)
01-31 20:58:50.805 11883-11883/com.quickclip.panky.quickclip V/InputMethodManager: onWindowFocus: android.support.v7.widget.AppCompatEditText{23f6523 VFED..CL. .F....ID 0,60-720,151 #7f070030 app:id/editText} softInputMode=288 first=true flags=#81810100
01-31 20:58:50.806 11883-11893/com.quickclip.panky.quickclip I/System: FinalizerDaemon: finalize objects = 1
01-31 20:58:50.808 11883-11883/com.quickclip.panky.quickclip V/InputMethodManager: START INPUT: android.support.v7.widget.AppCompatEditText{23f6523 VFED..CL. .F....ID 0,60-720,151 #7f070030 app:id/editText} ic=com.android.internal.widget.EditableInputConnection@b1db6e0 tba=android.view.inputmethod.EditorInfo@a9f4d99 controlFlags=#107
01-31 20:58:50.825 11883-11902/com.quickclip.panky.quickclip I/[MALI][Gralloc]: [+]r_hnd(0x7fa46754e0), client(51), share_fd(56)
01-31 20:58:50.825 11883-11902/com.quickclip.panky.quickclip D/GraphicBuffer: register, handle(0x7fa46754e0) (w:720 h:1280 s:720 f:0x1 u:0x000b00)
01-31 20:59:20.710 11883-11883/com.quickclip.panky.quickclip D/TextView: touchFinish handled:true    --- mShowToolbar=true
01-31 20:59:22.042 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 0, 147, 18, 29
01-31 20:59:22.340 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 0, 175, 20, 23
01-31 20:59:23.804 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 0, 197, 19, 30
01-31 20:59:24.070 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 64, 62, 6, 29
01-31 20:59:24.514 11883-11902/com.quickclip.panky.quickclip D/OpenGLRenderer: CacheTexture 2 upload: x, y, width height = 0, 226, 19, 23
01-31 20:59:33.248 11883-11883/com.quickclip.panky.quickclip I/View: Key down dispatch to android.support.v7.widget.AppCompatEditText{23f6523 VFED..CL. .F...... 0,60-720,151 #7f070030 app:id/editText}, event = KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ENTER, scanCode=0, metaState=0, flags=0x16, repeatCount=0, eventTime=44923912, downTime=44923912, deviceId=-1, source=0x0 }
01-31 20:59:33.252 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: [ANR Warning]Input routeing takes more than 6000ms since 1970-01-01 05:30:00.000, this = ViewRoot{a79bdb2 com.quickclip.panky.quickclip/com.quickclip.panky.quickclip.MainActivity,ident = 0}
01-31 20:59:33.252 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$EarlyPostImeInputStage@76d1217 at 2018-01-31 20:59:33.244
01-31 20:59:33.253 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$NativePostImeInputStage@9bde604 at 2018-01-31 20:59:33.245
01-31 20:59:33.253 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$ViewPostImeInputStage@d0857ed at 2018-01-31 20:59:33.245
01-31 20:59:33.253 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$SyntheticInputStage@5a5d622 at 2018-01-31 20:59:33.250
01-31 20:59:33.255 11883-11883/com.quickclip.panky.quickclip I/View: Key up dispatch to android.support.v7.widget.AppCompatEditText{23f6523 VFED..CL. .F...... 0,60-720,151 #7f070030 app:id/editText}, event = KeyEvent { action=ACTION_UP, keyCode=KEYCODE_ENTER, scanCode=0, metaState=0, flags=0x16, repeatCount=0, eventTime=44923912, downTime=44923912, deviceId=-1, source=0x0 }
01-31 20:59:33.267 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: [ANR Warning]Input routeing takes more than 6000ms since 1970-01-01 05:30:00.000, this = ViewRoot{a79bdb2 com.quickclip.panky.quickclip/com.quickclip.panky.quickclip.MainActivity,ident = 0}
01-31 20:59:33.267 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$EarlyPostImeInputStage@76d1217 at 2018-01-31 20:59:33.253
01-31 20:59:33.267 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$NativePostImeInputStage@9bde604 at 2018-01-31 20:59:33.254
01-31 20:59:33.268 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$ViewPostImeInputStage@d0857ed at 2018-01-31 20:59:33.254
01-31 20:59:33.268 11883-11883/com.quickclip.panky.quickclip V/ViewRootImpl: Input event delivered to android.view.ViewRootImpl$SyntheticInputStage@5a5d622 at 2018-01-31 20:59:33.266
01-31 20:59:33.268 11883-11883/com.quickclip.panky.quickclip E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
01-31 20:59:33.270 11883-11883/com.quickclip.panky.quickclip E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

2 个答案:

答案 0 :(得分:1)

您应该从主线程访问任何UI组件,其中

活动变量,如果您的活动

,则指定实例
 Activity activity = this; 

所以Modified Runnable应该是这样的。

Runnable myRunnable = new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try { Thread.sleep(1000); }
                    catch (InterruptedException e) { e.printStackTrace(); }
                    activity.runOnUiThread(new Runnable() {
                        public void run() {
                            copyMethod();
                        }
                    });
                }
            }
        };

答案 1 :(得分:0)

https://developer.android.com/training/multiple-threads/define-runnable.html

  

在类中,Runnable.run()方法包含代码   执行。通常,Runnable中允许任何内容。记得,   但是,Runnable不会在UI线程上运行,所以它   不能直接修改UI对象,例如View对象。

您无法e1.setText("");

中的Runnable.run()

你sholuld使用AsyncTask

 private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
     protected Void doInBackground(Void... void) {
         try { Thread.sleep(1000); }
         catch (InterruptedException e) { e.printStackTrace(); }
     }

     protected void onPostExecute(Void result) {
         e1.setText("");
     }
 }

https://developer.android.com/reference/android/os/AsyncTask.html