android - 当我尝试使用另一个类的信息设置 EditText 时出现 NullpointerException

标签 android android-asynctask gps android-edittext

我读过很多帖子,问题几乎相同,但它对我的问题没有帮助,问题是我正在尝试创建一个应用程序来不断更新 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 interfaceAsyncTask 完成时获取数据。

关于android - 当我尝试使用另一个类的信息设置 EditText 时出现 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390711/

相关文章:

android - Android 中的动态图形渲染

java - 如何让我的动画更流畅 Android

php - 如何根据 GPS 位置的接近程度过滤数据库结果?

java - 如何将 RecyclerView 添加到 View

android - Flutter应用程序无法在真实设备或仿真器上运行

java - 我们可以在android中使元素全局化吗

android - 多个 AsyncTasks 的串行执行

java - 如何从 AsyncTask 返回 boolean 值?

c# - 从 C# 向网络服务器发送数据,最有效的方法是什么?

ios - 我如何了解位置服务是否使用 GPS 来确定用户在 iOS 中的位置?