首页 > 解决方案 > 如何组织以下简单的 Java 代码?

问题描述

作为 Java 和 Android 的初学者,我了解 Java 允许您通过分离成不同的文件、类等来编写“干净”的代码。

现在我有以下工作代码,用于显示我当前位置的活动:

public class MainActivity extends AppCompatActivity {
private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        //
    } else {
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
                null /* Looper */);
    }

    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                TextView tv = (TextView) findViewById(R.id.tv);
                Double latDouble = location.getLatitude();
                String latString = latDouble.toString();
                tv.setText(latString);
            }
        };
    };
}

我应该如何更改它以使 MainActivity 看起来更干净,并且我将大部分代码放在不同的文件中?我是否需要创建一个新的 Java 类,然后从 Main Activity 扩展它?

我想举一个例子来说明如何安排我的简单代码以使其符合 Java 约定。我知道这可能是个愚蠢的问题,但它会对我(可能还有更多的初学者)有很大帮助!谢谢

标签: javaandroid

解决方案


我不会只为这么多代码创建一个单独的文件。有时你必须问自己代码的哪一部分可以在其他场景中重用,然后你可以将它组织在一个单独的抽象类、一个片段等中,并可能将它添加到它自己的模块中并将它导入到不同的项目中. 通常,分离或划分用于提高可重用性或可读性。

从上面的代码中,您可以创建一个方法来初始化您的位置请求。

例如。

public void initLocationRequest (LocationRequest request, Double millisInterval, Double millisFastestInterval, int priority) {
    request.setInterval(millisInterval);
    mLocationRequest.setFastestInterval(millisFastestInterval);
    mLocationRequest.setPriority(priority);
}

那么你就这样称呼它:

initLocationRequest (10000, 5000, LocationRequest.PRIORITY_HIGH_ACCURACY); 

如果您有许多可以在各种活动中重用的方法,您可以创建一个类(例如 LocationUtils)并将所有这些方法添加为public static。然后从你的活动中,你会打电话给他们:

LocationUtils.yourMethodName(yourMethodVariable);

推荐阅读