2015-08-29 2 views
2

В моем проекте в MainActivity.java я есть:Почему класс таймера, который я добавил в мой проект, таймер не запускается, когда я нажимаю кнопку?

public class MainActivity extends ActionBarActivity 
{ 
    private static final int MY_DATA_CHECK_CODE = 0; 
    public static MainActivity currentActivity; 
    TextToSpeech mTts; 
    private String targetURL; 
    private String urlParameters; 
    private Button btnClick; 
    private String clicking = "clicked"; 
    private String[] ipaddresses = new String[]{ 
     "http://192.168.1.10:8098/?cmd=nothing"}; 
    private String iptouse = ""; 
    private TextView text; 
    private boolean connectedtoipsuccess = false; 
    private int counter = 0; 
    private NotificationCompat.Builder mbuilder; 
    private Timer timer = new Timer(); 

    private TextView text1, text2, text3; 
    private long starttime = 0; 

    private TimerCounter tc; 

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

     tc = new TimerCounter(); 
    } 
} 

В классе Timercounter я есть:

package com.test.webservertest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.SystemClock; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.Timer; 

    public class TimerCounter extends Activity 
    { 
     private Button startButton; 
     private Button pauseButton; 

     private TextView timerValue; 

     private long startTime = 0L; 

     private Handler customHandler = new Handler(); 

     long timeInMilliseconds = 0L; 
     long timeSwapBuff = 0L; 
     long updatedTime = 0L; 

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

      timerValue = (TextView) findViewById(R.id.timerValue); 

      startButton = (Button) findViewById(R.id.startButton); 

      startButton.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View view) { 
        startTime = SystemClock.uptimeMillis(); 
        customHandler.postDelayed(updateTimerThread, 0); 

       } 
      }); 

      pauseButton = (Button) findViewById(R.id.pauseButton); 

      pauseButton.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View view) { 

        timeSwapBuff += timeInMilliseconds; 
        customHandler.removeCallbacks(updateTimerThread); 

       } 
      }); 

     } 

     private Runnable updateTimerThread = new Runnable() { 

      public void run() { 

       timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 

       updatedTime = timeSwapBuff + timeInMilliseconds; 

       int secs = (int) (updatedTime/1000); 
       int mins = secs/60; 
       secs = secs % 60; 
       int milliseconds = (int) (updatedTime % 1000); 
       timerValue.setText("" + mins + ":" 
         + String.format("%02d", secs) + ":" 
         + String.format("%03d", milliseconds)); 
       customHandler.postDelayed(this, 0); 
      } 

     }; 
    } 

Это XML-файл код кнопки ресурсов и TextViews:

<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" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       tools:context=".MainActivity"> 

    <TextView 
     android:text="WEBSERVER" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:textSize="50dp" 
     android:textColor="#FFF" 
     android:id="@+id/textView"/> 

    <TextView 
     android:id="@+id/textView1" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="35dp" 
     android:textSize="18sp" 
     android:textColor="#ff0000" 
     android:text="HttpURLConnection\nIP Based" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Checking Connection.." 
     android:layout_above="@+id/textView" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="47dp"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Check Ip" 
     android:id="@+id/checkipbutton" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="61dp"/> 

    <TextView 
     android:id="@+id/timerValue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:textSize="40sp" 
     android:textColor="#000000" 
     android:layout_marginTop="90dp" 
     android:text="@string/timerVal" /> 

    <Button 
     android:id="@+id/startButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="170dp" 
     android:text="startButtonLabel" /> 

    <Button 
     android:id="@+id/pauseButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="pauseButtonLabel" 
     android:layout_alignParentRight="true" 
     android:layout_marginTop="170dp"/> 


</RelativeLayout> 

Нижний TextView и две КНОПКИ предназначены для использования TimerCounter.

Тогда у меня есть файл strings.xml:

<resources> 
    <string name="app_name">WebServerTest</string> 

    <string name="hello_world">Hello world!</string> 
    <string name="action_settings">Settings</string> 
    <string  name="title_activity_activity_motion_event">activity_motion_event</string> 
    <string name="status1_string">Touch One Status</string> 
    <string name="title_activity_activity__motion">Activity_Motion</string> 
    <string name="status_string">Touch One Status</string> 
    <string name="timerVal">00:00:00</string> 
    <string name="pauseButtonLabel">Pause</string> 
    <string name="startButtonLabel">Start</string> 
</resources> 

Я не получаю никаких erorrs или исключения, но когда я бегу свою программу и нажмите кнопку Start ничего не произойдет.

ответ

2

Существуют разные причины, объясняющие, почему ваше приложение не ведет себя так, как ожидалось.

Во-первых, ваш класс TimerCounter расширяет Activity. Когда вы вызываете tc = новый TimerCounter(), вы, вероятно, пытаетесь запустить активность TimerCounter. Если вы хотите, чтобы достичь этого, вы должны использовать Android Intent и запустить его

Intent i = new Intent(this, TimerCounter.class); 
startActivity(i); 

Вы также должны объявить активность в вашем Manifest.xml:

<activity 
     android:name="com.test.webservertest.TimerCounter" 
     android:label="@string/app_name" 
     /> 

Вы где, вероятно, обмануты тем что ваши два действия имеют один и тот же макет (R.layout.activity_main). Поэтому, когда вы нажимаете на кнопку, вы все еще находитесь в своем MainActivity, а не в Activity TimerCounter.

Затем, чтобы оптимизировать ваш таймер, вы можете использовать TimerTask, связанную с таймером.

1

Заменить строку:

tc = new TimerCounter(); 

с этими линиями:

Intent i = new Intent(this, TimerCounter.class); 
startActivity(i); 

Это также кажется немного странным, что оба ваших действий используют один и тот же файл ресурсов. Не могли бы вы просто использовать один вид деятельности, так как все ваши MainActivity действительно отправляет вас в TimerCounter?

Смежные вопросы