내 앱을 실행하는 동안 나는 항상 이것을 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
오류가 발생합니다. 다른 답변을 보았지만 그 대답을 사용하는 방법을 이해하지 못했기 때문에 활동에 의한 호출이 없기 때문에 컨텍스트에 문제가 있다는 것을 이해했습니다. 그래서 성공없이 Activity 컨텍스트를 전달하려고했습니다 ... 이 내 코드입니다 :null 객체 참조에서 getApplicationContext()
편집 이미 답을했고 it'snt 일했다, 그래서 it'snt 솔루션 생각 becuase 나는 이것을 삭제. 당신의 대답에 나는 (MySingleton 클래스에 거리 클래스>에 parmerter 같은 맥락으로 ...) 코드
public class MainActivity extends AppCompatActivity {
private Button b;
private TextView t;
private LocationManager locationManager;
private LocationListener listener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t = (TextView) findViewById(R.id.textView);
b = (Button) findViewById(R.id.button);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.d("Co", "onLocationChanged");
Distance distance=new Distance();
t.setText("\n " + location.getLongitude() + " " + location.getLatitude()+"\n "+distance.getDistance(location));
Location l2=new Location("");
//float distance=location.distanceTo(l2);
Log.d("Co", String.valueOf(distance));
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(i);
}
};
configure_button();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 10: {
configure_button();
Log.d("Co", "premmsioenChecks");
}
break;
default:
break;
}
}
public void configure_button(){
// first check for permissions
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET}
,10);
Log.d("Co", "premmsioen");
}
return;
}
// this code won't execute IF permissions are not allowed, because in the line above there is return statement.
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//noinspection MissingPermission
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
Log.d("Co", "onClick");
Location l2=new Location("");
}
});
}
}
공용 클래스의 거리 {
static String url = "";
static String result="";
public String getDistance(Location location,Context context) {
Log.d("app","getDistance");
String origins=location.getLatitude()+","+location.getLongitude();
url="https://maps.googleapis.com/maps/api/distancematrix/json?&origins="+origins+"&destinations="+destinations;
Log.d("URL",url);
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("app","onRespone");
String distance=getText(response);
if (distance.contains("Error")) {
result=distance;
return;
}
else {
if (distance.contains("km")) {
int meters = Integer.parseInt(distance.replaceAll("[\\D]", "")) * 1000;
result= "The distance is " + meters + " meters";
return;
}
Log.d("7", String.valueOf(Integer.parseInt(distance.replaceAll("[\\D]", ""))));
result= "The distance is " + distance;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("app","Error Respone");
}
}
);
MySingleton.getInstance(context).addToRequestque(jsObjRequest);
return result;
}
public String getText(JSONObject response)
{
String text="";
try {
JSONArray rows = response.getJSONArray("rows");
Log.d("1", rows.toString());
if(rows.toString().contains("[]")) return text="Error";
JSONObject elements = rows.getJSONObject(0);
Log.d("2", elements.toString());
rows = elements.getJSONArray("elements");
Log.d("3", rows.toString());
elements = rows.getJSONObject(0);
Log.d("4", elements.toString());
Log.d("Error1","Error is @"+elements.getString("status"));
if(elements.getString("status").contains("OK"))
{
JSONObject d = elements.getJSONObject("distance");
Log.d("5", d.toString());
text = d.getString("text");
}
else {
Log.d("Error2", elements.getString("status"));
text = "Error-" + elements.getString("status");
}
}
catch (JSONException e)
{
text="Some error ocuerd";
}
return text;
}
}
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue requestQueue;
public static Context mCtx;
private MySingleton(Context context)
{
mCtx=context;
requestQueue= getRequestQueue();
}
public RequestQueue getRequestQueue() {
if(requestQueue==null) {
requestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return requestQueue;
}
public static synchronized MySingleton getInstance(Context context)
{
if(mInstance==null)
{
mInstance=new MySingleton(context);
}
return mInstance;
}
public <T> void addToRequestque(Request<T> request)
{
requestQueue.add(request);
}
}
업데이트 인해
이것은 logcat
06-24 16:19:26.771 25300-25300/com.example.elicahi.gateor D/Co: onClick
06-24 16:19:27.556 25300-25300/com.example.elicahi.gateor D/Co: onLocationChanged
06-24 16:19:27.579 25300-25300/com.example.elicahi.gateor D/AndroidRuntime: Shutting down VM
06-24 16:19:27.579 25300-25300/com.example.elicahi.gateor E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.elicahi.gateor, PID: 25300
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:107)
at com.example.elicahi.gateor.MySingleton.getRequestQueue(MySingleton.java:24)
at com.example.elicahi.gateor.MySingleton.<init>(MySingleton.java:19)
at com.example.elicahi.gateor.MySingleton.getInstance(MySingleton.java:32)
at com.example.elicahi.gateor.Distance.getDistance(Distance.java:79)
at com.example.elicahi.gateor.MainActivity$1.onLocationChanged(MainActivity.java:54)
at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:285)
at android.location.LocationManager$ListenerTransport.-wrap0(LocationManager.java)
at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:230)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
getRequestQueue (MySingleton.java:24)'이것을 확인하십시오. –
이 줄의 문제'requestQueue = Volley.newRequestQueue (mCtx.getApplicationContext());''mCtx'가 null입니다. –
이것이 이해되었으므로 MainActivty 컨텍트를 MySingleton으로 전달했지만 여전히 같은 오류가 발생합니다 ... – user5209063