我读过很多帖子,问题几乎相同,但它对我的问题没有帮助,问题是我正在尝试创建一个应用程序来不断更新 2 个 EditTexts for Latitude 和使用设备 GPS 的经度。在教程中,我看到他们在 MainActivity 中创建类,所以我尝试做几乎相同的事情,但创建一个新的类文件。当我将信息发送到 MainActivity 时,它到达了 EditText 但似乎这些信息无法填充我不知道为什么的信息......认为这可能是我尝试实现 AsynkTask 的线程(但我的 android 技能不是很高)并且我有同样的错误......如果有人可以帮助我,我会非常棒!我接下来发布代码...
这是MainActivity
public class MainActivity extends Activity {
public EditText edTLatitud;
public EditText edTLongitud;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edTLatitud = (EditText)this.findViewById(R.id.edTxtLatitud);
edTLongitud = (EditText)this.findViewById(R.id.edTxtLongitud);
ConfigGps();
}
private void ConfigGps()
{
LocationManager mLocationManager;
LocationListener mLocationListener;
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLocationListener = new MyLocationListener();
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000, 1, mLocationListener);
}
这是新文件类
public class MyLocationListener implements LocationListener{
private MainActivity mainActivity = new MainActivity();
private GPSBackground gpsBackground = new GPSBackground();
private String Latitud,Longitud;
@Override
public void onLocationChanged(Location location) {
gpsBackground.execute(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
private class GPSBackground extends AsyncTask<Location, Void,Void>
{
@Override
protected Void doInBackground(Location... params) {
Location location = params[0];
try{
mainActivity.edTLatitud.setText(String.valueOf(location.getLatitude()));
mainActivity.edTLongitud.setText(String.valueOf(location.getLongitude()));
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
}
我发现的错误是这个:
563-572/com.apps3d.logixuexapp W/System.err: java.lang.NullPointerException 08-22 18:57:40.745 563-572/com.apps3d.logixuexapp W/System.err: at com.apps3d.logixuexapp.MyLocationListener$GPSBackground.doInBackground(MyLocationListener.java:50) 08-22 18:57:40.745 563-572/com.apps3d.logixuexapp W/System.err: at com.apps3d.logixuexapp.MyLocationListener$GPSBackground.doInBackground(MyLocationListener.java:42) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:185) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:138) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 08-22 18:57:40.755 563-572/com.apps3d.logixuexapp W/System.err: at java.lang.Thread.run(Thread.java:1019)
好吧,如果我做错了什么,请帮助我,我是 android 开发的新手 jejej 谢谢!!
最佳答案
这里有几件事。这不是使用您的 Activity
引用的正确方法。此外,您不能更新 doInBackground()
中的 UI
元素,因为它需要在 UI
上完成。您可以在任何其他 AsyncTask
方法中执行此操作。此外,如果您能够使其成为您的 Activity
的内部类,那么它将可以访问成员变量及其函数。
See these answers传递对 AsyncTask
的引用。
And this one on using an interface在 AsyncTask
完成时获取数据。
关于android - 当我尝试使用另一个类的信息设置 EditText 时出现 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390711/