Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android测验中实现计时器?_Java_Android_Timer_Imageview - Fatal编程技术网

Java 如何在Android测验中实现计时器?

Java 如何在Android测验中实现计时器?,java,android,timer,imageview,Java,Android,Timer,Imageview,我正在进行Android测验。我想在问题XML的ImageView中添加计时器,我想从欢迎XML的播放按钮中调用倒计时按钮。我只是在问题xml中通过在ImageView中添加这样一行来设置onClick 有问题的XML 在这段代码中,我刚刚编写了定时器的代码来调用Image并在timepractivity中实现代码。但当我点击播放按钮时,我的计时器并没有启动。我的播放按钮在不同的活动中工作。所以有人能帮助我如何在不同的XML中调用计时器吗 我的日志:- !ENTRY org.eclipse.ui

我正在进行Android测验。我想在
问题XML
的ImageView中添加计时器,我想从
欢迎XML
的播放按钮中调用
倒计时按钮。我只是在
问题xml
中通过在ImageView中添加这样一行来设置
onClick

有问题的XML

在这段代码中,我刚刚编写了定时器的代码来调用Image并在timepractivity中实现代码。但当我点击播放按钮时,我的计时器并没有启动。我的播放按钮在不同的活动中工作。所以有人能帮助我如何在不同的XML中调用计时器吗

我的日志:-

!ENTRY org.eclipse.ui 4 0 2013-09-02 17:19:38.741
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.IllegalArgumentException: Widget has the wrong parent
    at org.eclipse.swt.SWT.error(SWT.java:4342)
    at org.eclipse.swt.SWT.error(SWT.java:4276)
    at org.eclipse.swt.SWT.error(SWT.java:4247)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
    at org.eclipse.swt.widgets.Control.setMenu(Control.java:3462)
    at com.android.ddmuilib.logcat.LogCatPanel$20.handleEvent(LogCatPanel.java:1042)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
    at org.eclipse.swt.widgets.Widget.showMenu(Widget.java:1472)
    at org.eclipse.swt.widgets.Widget.wmContextMenu(Widget.java:1574)
    at org.eclipse.swt.widgets.Control.WM_CONTEXTMENU(Control.java:4673)
    at org.eclipse.swt.widgets.Table.WM_CONTEXTMENU(Table.java:5972)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4532)
    at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989)
    at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
    at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2440)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:564)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:430)
    at org.eclipse.swt.widgets.Widget.wmRButtonUp(Widget.java:2395)
    at org.eclipse.swt.widgets.Control.WM_RBUTTONUP(Control.java:5134)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4596)
    at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989)
    at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
    at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

提前感谢

您应该尝试以下代码

private void setTimer() {
    counterTimer = new CountDownTimer(finishTime * 1000, 1000) {
        public void onFinish() {
            //code to execute when time finished
        }

        public void onTick(long millisUntilFinished) {
            int seconds = (int) (millisUntilFinished / 1000);
            int minutes = seconds / 60;
            seconds = seconds % 60;

            if (seconds < 10) {
                txtTimer.setText("" + minutes + ":0" + seconds);
            } else {
                txtTimer.setText("" + minutes + ":" + seconds);
            }
        }
    };
    counterTimer.start();
}
注意:参数以毫秒为单位


要启动计时器,只需在任何按钮的单击事件中调用
setTimer()
方法。

我看不出计时器实现有任何错误

但是你有这个

 text = (TextView) this.findViewById(R.id.button1);
   <ImageView
android:id="@+id/button1"
你有这个吗

 text = (TextView) this.findViewById(R.id.button1);
   <ImageView
android:id="@+id/button1"
试试下面的方法。点击按钮,计时器启动

public class MainActivity extends Activity implements OnClickListener {

private Button startB;
public TextView text;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startB = (Button) this.findViewById(R.id.button1);
startB.setOnClickListener((OnClickListener) this);
text = (TextView) findViewById(R.id.textView1);
}

@Override
public void onClick(View v) {
    new CountDownTimer(30000, 1000) { // adjust the milli seconds here

        public void onTick(long millisUntilFinished) {
        text.setText(""+String.format("%d min, %d sec", 
                        TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished),
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
        }

        public void onFinish() {
           text.setText("done!");
        }
     }.start();

}   
}
检查此链接

对于低于1.5的Java版本或不完全支持TimeUnit类的系统,可以使用以下等式:

int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
编辑:



您的应用程序应该会因您发布的代码而崩溃。如果是这样,将stacktracepost张贴到你的
question.xml
你有一个imageview,我看不到你在任何地方初始化imageview。您可以使用id
按钮1
初始化文本视图。请确保您的视图已正确初始化。是的,首先我在那里添加了按钮,然后我用ImageView将其删除。或者我也可以更改其ID。如果您有ImageView,则在活动中将其初始化为iamgeview,ID在xml中提及。如果您有textview,则初始化textview textview。但是您有
text.setText
,所以将imageview更改为textview,然后在活动中初始化textview。然后将文本设置为textview您所做的是错误的您有textview,按钮是difrerent xml,并且您正在单个活动中初始化它。your question.xml必须具有textview和play按钮。我在我的TimeActivity中实现了上述代码,并在我的xml中添加了一个Id为Timer的textview,并将其称为OnClick play按钮,但我无法启动Timer..:(@akashraj发布您的更新代码它工作正常毫无疑问您正在这样做wrong@akashraj检查“编辑”按钮,它工作正常。您可能做错了什么。甚至发布了快照。如果出现异常,请检查日志猫。@Raghunadan.我仍然陷于计时器活动中。它在我的项目中仍然不工作。当我在测试项目上单独运行它。我不知道如何继续。@akashraj发布更新的代码xml,如果出现异常,则发布崩溃的logcat详细信息以获得进一步帮助。如果不发布相关详细信息,则无法提供帮助further@akashraj,是否要在另一个活动中添加侦听器以获取启动计时器?详细说明。你的问题我不太清楚。@chitan基本上我有一个ImageView(在这里我必须调用我的计时器)问题XMl和Play按钮(在我的欢迎XMl中)。当我单击“播放”按钮时,我的测验开始,我也希望计时器开始。我还创建了一个TimePractivity。@chitan是的,我想在另一个活动中添加侦听器以启动计时器。创建一个侦听器界面,然后在另一个活动中注册它。当用户单击按钮时,启动该侦听器,以便注册的活动也得到通知。:)你能给我举个例子吗我非常感谢你。
 <TextView
android:id="@+id/textView1" 
text = (TextView) findViewById(R.id.textView1);
public class MainActivity extends Activity implements OnClickListener {

private Button startB;
public TextView text;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startB = (Button) this.findViewById(R.id.button1);
startB.setOnClickListener((OnClickListener) this);
text = (TextView) findViewById(R.id.textView1);
}

@Override
public void onClick(View v) {
    new CountDownTimer(30000, 1000) { // adjust the milli seconds here

        public void onTick(long millisUntilFinished) {
        text.setText(""+String.format("%d min, %d sec", 
                        TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished),
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
        }

        public void onFinish() {
           text.setText("done!");
        }
     }.start();

}   
}
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="68dp"
        android:text="Button" />

</RelativeLayout>