gpt4 book ai didi

java - Android应用程序模块化(类)

转载 作者:行者123 更新时间:2023-12-01 09:35:17 25 4
gpt4 key购买 nike

感谢您花时间加载我的帖子并查看我的问题。

很长一段时间以来,我一直在创建很长的 Android Activity ,只是因为我不太了解类及其工作原理。本周早些时候,我了解到在方法之间发送信息是多么容易。今天,我正在努力在类(class)之间发送信息。我不想用一页很长的代码来筛选,我想将其分解为多个 block ,并进行信息引用并相互交互。这样可以更轻松地保持我的代码组织和更快地做出改变。我尝试从主线程中删除两个单独的类,并在同一目录中创建它们,代码没有显示任何错误,因此它们应该可以正常执行。然而,我在某些地方弄乱了上下文。我也没有完全理解上下文的概念。我有一个类用来获取我的手机位置,另一个类要上传到我的服务器。在尝试执行时,这些类都会返回 null 值。然而,当它在一项主要 Activity 上全部简化时,没有出现空错误。我一直在阅读上下文是这里的问题。

我已经从我的主线程引用了其他类,如下所示:

    LocationClass LocationClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapfrag);
LocationClass = new LocationClass();


@Override
public void onMapReady(GoogleMap googleMap) {
Map = googleMap;
Map.setOnMapClickListener(this);
Map.setOnMapLongClickListener(this);
Map.setMapType(1);
Map.setOnMarkerClickListener(this);
LocationClass.GETLOCATION();
}

我的位置类如下所示:

public class LocationClass extends AppCompatActivity implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
private Location mLastLocation;
private GoogleApiClient mGoogleApiClient;
public LatLng reallifelocation;
public static final String userdata = "userdata";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (checkPlayServices()) {
buildGoogleApiClient();
}
check_perms();
}

然后它会检查权限并执行所需的操作来获取位置。这段代码全部经过测试并在主线程中工作,我只是想为其创建自己的类

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:112)
at biz.tanners.geo_x.LocationClass.GETLOCATION(LocationClass.java:49)

错误所在(LocationClass.java):

public void GETLOCATION() {
if (ActivityCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}
final SharedPreferences prefs = getSharedPreferences(userdata, MODE_PRIVATE);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
reallifelocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
}
//add to prefs or offline db
}

最佳答案

您的错误源于这里

 if (ActivityCompat.checkSelfPermission(
this.getApplicationContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}

这里this可能应该对应于Context,并且作为另一个类,上下文是不同的。

一个快速修复方法是将 Activity 的上下文作为参数传递给 LocationClass 的对象。通过将其添加到构造函数中并将其分配给正确的变量,稍后您可以使用该变量来代替 this

希望这有帮助。

关于java - Android应用程序模块化(类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com