2016-06-22 7 views
0

Ich habe ein Problem bei der Einrichtung meines Chronometers. Die Java-Datei zeigt einen Fehler bei "updateTimerText" an, der besagt, dass Methode "updateTimerText (java.lang.string) nicht aufgelöst werden kann. Wie löse ich das? Alles ist gut auf dem Fragment, das ich versuche, diese Aufgabe auf es zu werfen, ist nur der Chronometer.java Datei. wenn Sie weitere Informationen oder ein Code benötigen, lassen Sie es mich wissen. Vielen Dank im Voraus.Chronometer kann nicht aufgelöst werden Methode

package com.example.platinumirish.runassistwithdrawer; 

import android.content.Context; 

import runassist.demo.fragments.MainFragment; 

/** 
* Created by Platinum Irish on 22/06/2016. 
*/ 
public class Chronometer implements Runnable { 

    public static final long MILLIS_TO_MINUTES = 60000; 
    public static final long MILLIS_TO_HOURS = 3600000; 

    private Context mContext; 
    private long mStartTime; 

    private boolean mIsRunning; 

    public Chronometer(Context context){ 
     mContext = context; 
    } 

    public void start() { 
     mStartTime = System.currentTimeMillis(); 
     mIsRunning = true; 

    } 

    public void stop() { 

     mIsRunning = false; 

    } 

    @Override 
    public void run() { 

     while(mIsRunning) { 

      long since = System.currentTimeMillis() - mStartTime; 

       int seconds = (int) (since/1000 % 60); 
       int minutes = (int)(((since/MILLIS_TO_MINUTES)) % 60); 
       int hours = (int)((since/(MILLIS_TO_HOURS)) % 24); 
       int millis = (int) since % 1000; 

       MainFragment mainFragment = (MainFragment) mContext.updateTimerText(String.format(
        "%02d;%02d;%02d;%03d", hours, minutes, seconds, millis 

      )); 
     } 

    } 
} 

auch hier ist mein Haupt Fragment ist, wenn es in irgendeiner Weise oder Form zu helfen.

package runassist.demo.fragments; 

import android.app.Fragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.Chronometer; 
import android.widget.TextView; 

import com.example.platinumirish.runassistwithdrawer.R; 


public class MainFragment extends Fragment{ 

private TextView mTvTime; 
private Button mBtnStart; 
private Button mBtnStop; 

private Context mContext; 
private Chronometer mChronometer; 
private Thread mThreadChrono; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

    mTvTime = (TextView) rootView.findViewById(R.id.chronometer); 
    mBtnStart = (Button) rootView.findViewById(R.id.start_button); 
    mBtnStop = (Button) rootView.findViewById(R.id.stop_button); 

    mBtnStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(mChronometer == null) { 
       mChronometer = new Chronometer(mContext); 
       mThreadChrono = new Thread((Runnable) mChronometer); 
       mThreadChrono.start(); 
       mChronometer.start(); 
      } 
     } 
    }); 

    mBtnStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(mChronometer !=null) { 
       mChronometer.stop(); 
       mThreadChrono.interrupt(); 
       mThreadChrono = null; 

       mChronometer = null; 
      } 

     } 
    }); 

    return rootView; 

} 

public void updateTimerText(final String time) { 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      mTvTime.setText(time); 
     } 

    }); 
} 

private void runOnUiThread(Runnable runnable) { 
} 

}

+0

Dies ist nicht nur Java, sollten Sie Tags zu Ihrer Frage hinzufügen wie Android – SomeDude

+0

danke für den Tipp –

+0

'' '((MainFragment) mContext) .updateTimerText (...)' '' das ist die Art und Weise Sie wollen nennen. Überprüfen Sie die Quadrate um mContext. – danypata

Antwort

0

((MainFragment) mContext).updateTimerText(...) Dies ist die Art, wie Sie i anrufen möchten t. Überprüfen Sie die Quadrate um mContext. Auch Ihre Methode updateTimerTextvoid so diese Zeile zurück:

MainFragment mainFragment = (MainFragment) mContext.updateTimerText(String.format(
       "%02d;%02d;%02d;%03d", hours, minutes, seconds, millis)) 

wird ein weiterer Fehler erhöhen. Es sollte einfach sein:

((MainFragment) mContext).updateTimerText(...) 

Ich kann mir nicht helfen, ich habe vorschlagen, einen anderen Ansatz zu verwenden, vor allem ist es eine schlechte Idee, einen Verweis auf den Kontext, in einer Runnable Klasse zu halten.

Zweitens, es schlecht ist entweder zu werfen Context-Activity oder Fragment, wird die Wiederverwendbarkeit von Code zu reduzieren und unerwartete Abstürze verursachen, wenn die Entwickler nicht bewusst ist dies wirft.

+0

Ich habe es geändert in '((MainFragment) mContext) .updateTimerText (String.format (' jetzt bekomme ich einen anderen Fehler bei '((MainFragment) mContext)' sagen "Inconvertable Typen; kann android.content.context nicht zu runassist. demo.fragments.MainFragment "@danypata –

+0

@ArronPotts Sie müssen die Art ändern, wie Sie mit dem Timer kommunizieren, es ist falsch, ich habe gerade eine Antwort auf Ihr aktuelles Problem geschrieben. Bitte googeln Sie ein wenig darüber, wie Timer zu verwenden und wie Senden/Empfangen von Nachrichten. – danypata

Verwandte Themen