当前位置: 首页 > 知识库问答 >
问题:

尝试将数据从子活动返回到MainActivity时获取NullPointerException

公羊安怡
2023-03-14

我正在尝试实现一个Android应用程序,它启动一个子活动,计算我当前位置的坐标。然而,在尝试将数据发送回MainActivity时,我在onActivityResult方法中得到了一个NullPointerException。以下是两个类:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;



public class MainActivity extends AppCompatActivity{

//Globals
public String uname = null;
//private MyLocationReceiver myLocationReceiver;
public double lat = 0;
public double lng = 0;
public LatLng curr_pos;
public final String NULL_STRING = "NULL";

//Get GUI handles
public Button sendButton; //
public EditText username;
public Button MapButton; //
public EditText LatBox;
public EditText LngBox;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            String LatText = data.getStringExtra("LatValue"); 
            String LngText = data.getStringExtra("LngValue"); 
            LatBox.setText(LatText); // <- GETTING NULLPOINTER HERE
            LngBox.setText(LngText); // <- GETTING NULLPOINTER HERE
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    //set GUI for MainActivity
    setContentView(R.layout.activity_main);

    //EventBus.getDefault().register(this);
    //Log.d("Register", "EventBus registered in onCreate");

    MapButton = (Button) findViewById(R.id.locationButton);
    //Call the class which will handle finding coordinates
    MapButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent MapIntent = new Intent(getApplicationContext(), ActivityMap.class);
            startActivityForResult(MapIntent, 1);
        }
    });


    sendButton = (Button) findViewById(R.id.Submit);
    //Set action for Button
    sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //Get username from user
            username = (EditText) findViewById(R.id.UsernameText);
            uname = username.getText().toString();

            //Generate intent to start IntentService
            Intent i = new Intent(getApplicationContext(), Register.class);

            //Put the extra field of username
            i.putExtra("username", uname);
            i.putExtra("latitude", lat);
            i.putExtra("longitude", lng);
            i.putExtra("type", "meetup.be2015.gcm_meetup.MAIN_ACTIVITY");

            //Start the IntentService on a different thread
            startService(i);
        }
    });
}

}
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.Looper;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import java.util.logging.Handler;

public class ActivityMap extends AppCompatActivity implements
    GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener{

protected GoogleApiClient mGoogleApiClient;
LocationRequest mLocationRequest;
protected Location mLastLocation;
public LocationListener listener;
protected final String TAG = getClass().getSimpleName();
public EditText t1;
public EditText t2;
public Button b1;
public final String NULL = "NULL";


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

    t1 = (EditText)findViewById(R.id.editText1);
    t2 = (EditText)findViewById(R.id.editText2);
    b1 = (Button)findViewById(R.id.BackButton);

    buildGoogleApiClient();
    mGoogleApiClient.connect();

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext(), MainActivity.class);
            if (mLastLocation != null) {
                i.putExtra("LatValue",String.valueOf(mLastLocation.getLatitude()));
                i.putExtra("LngValue",String.valueOf(mLastLocation.getLongitude()));
                setResult(RESULT_OK, i);
                finish();
            } else {
                i.putExtra("LatValue","NULL");
                i.putExtra("LngValue","NULL");
                setResult(RESULT_OK, i);
                finish();
            }
        }
    });
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}


@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    Log.d(TAG,"Built Client successfully...");
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Log.d(TAG,"ConnectionFailed() with code "+connectionResult.getErrorCode());
}

@Override
public void onConnected(Bundle bundle) {
    Log.d(TAG, "In onConnected..");

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

    if(mLastLocation == null) {
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(1000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    }

    else{
        t1.setText(String.valueOf(mLastLocation.getLatitude()));
        t2.setText(String.valueOf(mLastLocation.getLongitude()));
        //LatLng lng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());

        Toast.makeText(this, "Retrieved location from FusedLocation", Toast.LENGTH_LONG).show();

        Intent intent = new Intent();
        intent.putExtra("LatValue",String.valueOf(mLastLocation.getLatitude()));
        intent.putExtra("LngValue", String.valueOf(mLastLocation.getLongitude()));
        setResult(RESULT_OK, intent);
        finish();
    }
}

@Override
public void onConnectionSuspended(int i) {
    Log.d(TAG,"ConnectionSuspended() with code "+i);
}

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;
    double latitude = mLastLocation.getLatitude();
    double longitude = mLastLocation.getLongitude();
    if(latitude != 0 && longitude != 0) {
        t1.setText(String.valueOf(latitude));
        t2.setText(String.valueOf(longitude));

        Toast.makeText(this, "Retrieved Location from onLocationChanged...", Toast.LENGTH_LONG).show();

        Intent intent = new Intent();
   intent.putExtra("LatValue",String.valueOf(mLastLocation.getLatitude()));
        intent.putExtra("LngValue", String.valueOf(mLastLocation.getLongitude()));
        setResult(RESULT_OK, intent);
        finish();
    }
    else {
        t1.setText(NULL);
        t2.setText(NULL);

        Toast.makeText(this, "Problem with location...", Toast.LENGTH_LONG).show();

        Intent intent = new Intent();
        intent.putExtra("LatValue", "NULL");
        intent.putExtra("LngValue", "NULL");
        setResult(RESULT_OK, intent);
        finish();
    }
}

}

编辑:这是我的日志

03-13 13:06:59.940 14638-14638/会面。be2015.gcm\U meetup E/AndroidRuntime:致命异常:主java。lang.RuntimeException:向活动{meetup.be2015.gcm\u meetup/meetup.be2015.gcm\u meetup.MainActivity}传递结果ResultInfo{who=null,request=1,result=-1,data=Intent{(有额外的)}}}失败。android上的lang.NullPointerException。应用程序。ActivityThread。android上的deliverResults(ActivityThread.java:3216)。应用程序。ActivityThread。android上的handleSendResult(ActivityThread.java:3259)。应用程序。ActivityThread。在android上访问1200美元(ActivityThread.java:140)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1285)。操作系统。处理程序。android上的dispatchMessage(Handler.java:99)。操作系统。活套。android上的loop(Looper.java:174)。应用程序。ActivityThread。java上的main(ActivityThread.java:4952)。lang.reflect。方法java上的invokenactive(本机方法)。lang.reflect。方法在com上调用(方法java:511)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:1027)。Android内部的操作系统。合子岩。dalvik的main(ZygoteInit.java:794)。系统NativeStart。main(本机方法)由:java引起。开会时lang.NullPointerException。be2015.gcm\U会议。主要活动。android上的onActivityResult(MainActivity.java:60)。应用程序。活动android上的dispatchActivityResult(Activity.java:5372)。应用程序。ActivityThread。android上的deliverResults(ActivityThread.java:3212)。应用程序。ActivityThread。handleSendResult(ActivityThread.java:3259)

共有1个答案

樊俊悟
2023-03-14

你必须初始化LatBox

LatBox = (EditText) findViewById(R.id.xxx);
 类似资料:
  • 问题内容: 我有一个在我和它是一个连接到。当我单击时,我想说“ 单击按钮”。 这可能吗? 我知道两个连接到同一对象的对象可以轻松地相互通信并相互发送数据。但是对象可以将数据发送到对象中吗 编写自己的程序并将其附加到程序上是更好的编程吗?然后,我可以简单地让两个片段相互发送数据。 抱歉,如果这不是StackOverflow的正确类型。我是新手,因此无法在此问题上找到清晰的解释。 提前致谢! 问题答案

  • 我已经使用PreferenceFragment实现了我的应用程序的设置屏幕。当点击设置屏幕工具栏上的向上按钮时,我的应用程序返回主活动屏幕,但之前输入到EditText(进入设置屏幕之前)的数据丢失,EditText均为空白。 我尝试了实现onSaveInstanceState和onRestoreInstanceState,但它不起作用,因为单击设置屏幕工具栏中的向上按钮时,不会调用onResto

  • 首先我知道这是一个重复的问题。但我已经搜索并尝试从谷歌上列出的stackoverflow到quora,但仍然无法解决Get方法仍然返回null的问题。 这是我的类登录模型。com包下的java。你好模型 这是我的登录视图。com包下的java。你好看法 我想从menuView调用我的用户名。com包下的java。你好登录成功后查看 根据我在loginModel中调用Get方法时的问题,messag

  • 当用户触摸AlertDialog中的OK按钮时,我一直试图让我的应用程序返回到主活动。 我显示的警报对话框基本上是一条错误消息,用于通知用户没有找到他们选择并在不是主要活动的活动中调用的特定日期的数据,但我希望他们在单击确定时将其发送回主要活动。 调用运行良好,只是它似乎不知道如何找到主要活动,即使我使用的调用在任何正常活动中都有效。 我得到的错误是: 特定AlertDialog代码为:

  • 我无法在SpringBoot中呈现html页面。这是密码... 但当我点击http://localhost:8080/home时,它会显示以下日志

  • //回收器和视图 //调用提取数据方法extractData(); //提取数据