服务未更新 TextView 值 - Android GPS

TextView value not being updated by the Service - Android GPS

我有一个启动 DelayedMessageService 的按钮。该服务是非常简单的服务,因为它所做的只是计算用户移动的距离。我想显示总行进距离,但问题是它没有在我的 MainAcitivy 的 TextView 中显示值。有人可以帮我解决这个问题吗?这是我的 MainAcvity、服务和 activity_main.xml:

主要活动:

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

public class MainActivity extends Activity {
    String distanceStr;

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


        watchMileage();



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

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, DelayedMessageService.class);
                intent.putExtra(DelayedMessageService.EXTRA_MESSAGE,
                        getResources().getString(R.string.button_response));
                startService(intent);
            }
        });
    }

    private void watchMileage() {
        final TextView distanceView = (TextView)findViewById(R.id.distance);
        final Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                double distance = 0.0;
                if (mDelayedMessageService != null) {
                    distance = mDelayedMessageService.getMiles();
                }
                 distanceStr = String.format("%1$,.2f miles", distance);
                distanceView.setText(distanceStr);
                handler.postDelayed(this, 1000);
            }
        });
    }

    //Log.v("INOCRECTEA", distanceStr.toString());
}

//activity_main

<LinearLayout 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:orientation="vertical"
                tools:context=".MainActivity">

  <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/button_text"
      android:id="@+id/button"
      android:onClick="onClick"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />

  <TextView android:text=""
            android:id="@+id/distance"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:singleLine="false"
            android:textSize="50sp"/>
</LinearLayout>

您声明了一个名为 mDelayedMessageService 的变量,但我没有看到您在您提供的代码片段中对其进行了初始化,因此它是 null。然后在 watchMileage() 里面你做

if (mDelayedMessageService != null) {
      distance = mDelayedMessageService.getMiles();
}

显然,您的 distance 将永远是 0.0