java调用double服务_java – 在空对象引用上调用虚方法’double...

我所要做的就是让用户获得他喜欢的类型的列表.例如,如果输入是医院,我的应用程序将使用搜索字符串“Hospital”打开谷歌地图.但正如文档中使用地理编码所建议的那样地理代码:0,0?q = hospital uri显示坐标0纬度附近的所有医院. 0经度.因此,当我尝试使用以下代码首先获取用户坐标时.

放置Decoder.java

package com.kkze.Mappy;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.location.Criteria;

import android.location.Location;

import android.location.LocationManager;

import android.net.Uri;

import android.os.Build;

import android.os.Bundle;

import android.provider.Settings;

import android.text.TextUtils;

import android.util.Log;

import android.widget.Toast;

public class PlacesDecoder extends Activity {

Intent intentThatCalled;

public double latitude;

public double longitude;

public LocationManager locationManager;

public Criteria criteria;

public String bestProvider;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

intentThatCalled = getIntent();

String voice2text = intentThatCalled.getStringExtra("v2txt");

getLocation(voice2text);

}

public static boolean isLocationEnabled(Context context)

{

int locationMode = 0;

String locationProviders;

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)

{

try

{

locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

} catch (Settings.SettingNotFoundException e) {

e.printStackTrace();

}

return locationMode != Settings.Secure.LOCATION_MODE_OFF;

}

else

{

locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

return !TextUtils.isEmpty(locationProviders);

}

}

public void getLocation(String voice2txt) {

locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

criteria = new Criteria();

bestProvider = String.valueOf(locationManager.getBestProvider(criteria, true)).toString();

Location location = locationManager.getLastKnownLocation(bestProvider);

if (isLocationEnabled(PlacesDecoder.this)) {

Log.e("TAG", "GPS is on");

latitude = location.getLatitude();

longitude = location.getLongitude();

Toast.makeText(PlacesDecoder.this, "latitude:" + latitude + " longitude:" + longitude, Toast.LENGTH_SHORT).show();

searchNearestPlace(voice2txt);

}

else

{

AlertDialog.Builder notifyLocationServices = new AlertDialog.Builder(PlacesDecoder.this);

notifyLocationServices.setTitle("Switch on Location Services");

notifyLocationServices.setMessage("Location Services must be turned on to complete this action. Also please take note that if on a very weak network connection, such as 'E' Mobile Data or 'Very weak Wifi-Connections' it may take even 15 mins to load. If on a very weak network connection as stated above, location returned to application may be null or nothing and cause the application to crash.");

notifyLocationServices.setPositiveButton("Ok, Open Settings", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent openLocationSettings = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

PlacesDecoder.this.startActivity(openLocationSettings);

finish();

}

});

notifyLocationServices.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

finish();

}

});

notifyLocationServices.show();

}

}

public void searchNearestPlace(String v2txt) {

Log.e("TAG", "Started");

v2txt = v2txt.toLowerCase();

String[] placesS = {"accounting", "airport", "aquarium", "atm", "attraction", "bakery", "bakeries", "bank", "bar", "cafe", "campground", "casino", "cemetery", "cemeteries", "church", "courthouse", "dentist", "doctor", "electrician", "embassy", "embassies", "establishment", "finance", "florist", "food", "grocery", "groceries", "supermarket", "gym", "health", "hospital", "laundry", "laundries", "lawyer", "library", "libraries", "locksmith", "lodging", "mosque", "museum", "painter", "park", "parking", "pharmacy", "pharmacies", "physiotherapist", "plumber", "police", "restaurant", "school", "spa", "stadium", "storage", "store", "synagog", "synagogue", "university", "universities", "zoo"};

String[] placesM = {"amusement park", "animal care", "animal care", "animal hospital", "art gallery", "art galleries", "beauty salon", "bicycle store", "book store", "bowling alley", "bus station", "car dealer", "car rental", "car repair", "car wash", "city hall", "clothing store", "convenience store", "department store", "electronics store", "electronic store", "fire station", "funeral home", "furniture store", "gas station", "general contractor", "hair care", "hardware store", "hindu temple", "home good store", "homes good store", "home goods store", "homes goods store", "insurance agency", "insurance agencies", "jewelry store", "liquor store", "local government office", "meal delivery", "meal deliveries", "meal takeaway", "movie rental", "movie theater", "moving company", "moving companies", "night club", "pet store", "place of worship", "places of worship", "post office", "real estate agency", "real estate agencies", "roofing contractor", "rv park", "shoe store", "shopping mall", "subway station", "taxi stand", "train station", "travel agency", "travel agencies", "veterinary care"};

int index;

for (int i = 0; i <= placesM.length - 1; i++) {

Log.e("TAG", "forM");

if (v2txt.contains(placesM[i])) {

Log.e("TAG", "sensedM?!");

index = i;

Uri gmmIntentUri = Uri.parse("geo:" + latitude + "," + longitude + "?q=" + placesM[index]);

Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);

mapIntent.setPackage("com.google.android.apps.maps");

startActivity(mapIntent);

finish();

}

}

for (int i = 0; i <= placesS.length - 1; i++) {

Log.e("TAG", "forS");

if (v2txt.contains(placesS[i])) {

Log.e("TAG", "sensedS?!");

index = i;

Uri gmmIntentUri = Uri.parse("geo:" + latitude + "," + longitude + "?q=" + placesS[index]);

Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);

mapIntent.setPackage("com.google.android.apps.maps");

startActivity(mapIntent);

finish();

}

}

}

}

问题是始终和始终位置返回null.而且我知道,只要启用了位置,另一个应用程序Jarvis就可以轻松完成任务,如果不是,则只是要求用户.但在相同的条件下,我的应用程序总是崩溃.

我做了什么:

>花了一天一夜试图解决这个问题.

>浏览了有关该主题的众多页面.

>尝试了我自己的不同代码.

它仍然会发生.我是Android的初学者.

拜托,请帮助我.有没有办法解决我的问题?甚至认为其他应用程序设法做到了.

这是我的LogCat.

Process: com.kkze.Mappy, PID: 6742

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kkze.Mappy/com.kkze.Mappy.PlacesDecoder}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)

at android.app.ActivityThread.access$900(ActivityThread.java:172)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:145)

at android.app.ActivityThread.main(ActivityThread.java:5832)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference

at com.kkze.Mappy.PlacesDecoder.getLocation(PlacesDecoder.java:62)

at com.kkze.Mappy.PlacesDecoder.onCreate(PlacesDecoder.java:32)

at android.app.Activity.performCreate(Activity.java:6221)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)

at android.app.ActivityThread.access$900(ActivityThread.java:172)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:145)

at android.app.ActivityThread.main(ActivityThread.java:5832)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

同时检查位置!= null需要ACCESS_FINE_LOCATION权限,这会弄乱我的应用程序,导致它始终返回null.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值