gpt4 book ai didi

java - 当我从 android 服务调用类时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 15:17:51 25 4
gpt4 key购买 nike

这是我的第一个 Android 应用程序。我正在尝试从我使用 foursquare API 的不同类调用服务中的函数。我早些时候在一个 Activity 中尝试过这个函数,它工作得很好,但在服务中我得到了一个 NullPointerException。这是我正在使用的代码:

public class GuideMeService extends Service implements LocationListener {

LocationManager locationManager;
Geocoder geocoder;
// private CalendarContentResolver Calendar;
public FoursquareApp mFsqApp;
public ArrayList<FsqVenue> mNearbyList;
private static String TAG = "Service Class";
double lat;
double lng;
public static final String[] FIELDS = { CalendarContract.Calendars.NAME,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.CALENDAR_COLOR,
CalendarContract.Calendars.VISIBLE };

public static ArrayList<String> Events = new ArrayList<String>();
public static final Uri CALENDAR_URI = Uri
.parse("content://com.android.calendar/calendars");
public static final Uri EVENTS_URI = Uri
.parse("content://com.android.calendar/events");
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds
public static String query = "";

Set<String> calendars = new HashSet<String>();

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "GuideMe Servise started");
//this.stopSelf();
locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
new MyLocationListener()
);

Events = readCalendarEvent(getApplicationContext());
for(int i = 0 ; i < Events.size() ; i++){
query += Events.toArray()[i].toString() + " ";
}
Thread thread = new Thread()
{
@Override
public void run() {

try {
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
mNearbyList = mFsqApp.SearchBykeyword(location.getLatitude(), location.getLongitude(), query);
}catch (Exception e) {
e.printStackTrace();
}
}
};

thread.start();

}

我在这一行收到错误:

mNearbyList = mFsqApp.SearchBykeyword(location.getLatitude(), location.getLongitude(), query);

这是我在 mFsqApp 类中调用的函数:

public ArrayList<FsqVenue> SearchBykeyword(double latitude, double longitude, String query) throws Exception {
ArrayList<FsqVenue> venueList = new ArrayList<FsqVenue>();
try {
String ll = String.valueOf(latitude) + "," + String.valueOf(longitude);
URL url = new URL(API_URL + "/venues/search?ll=" + ll + "&query=" + query + "&radius=" + 50 + "&oauth_token=" + mAccessToken + "&v=20120610");

Log.d(TAG, "Opening URL " + url.toString());

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
//urlConnection.setDoOutput(true);

urlConnection.connect();
String response = streamToString(urlConnection.getInputStream());
JSONObject jsonObj = (JSONObject) new JSONTokener(response).nextValue();

JSONArray groups = (JSONArray) jsonObj.getJSONObject("response").getJSONArray("groups");

int length = groups.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
JSONObject group = (JSONObject) groups.get(i);
JSONArray items = (JSONArray) group.getJSONArray("items");

int ilength = items.length();

for (int j = 0; j < ilength; j++) {
JSONObject item = (JSONObject) items.get(j);

FsqVenue venue = new FsqVenue();

venue.id = item.getString("id");
venue.name = item.getString("name");

JSONObject location = (JSONObject) item.getJSONObject("location");

Location loc = new Location(LocationManager.GPS_PROVIDER);

loc.setLatitude(Double.valueOf(location.getString("lat")));
loc.setLongitude(Double.valueOf(location.getString("lng")));

venue.location = loc;
//venue.address = location.getString("address");
venue.distance = location.getInt("distance");
//venue.herenow = item.getJSONObject("hereNow").getInt("count");
venue.type = group.getString("type");

venueList.add(venue);
}
}
}
} catch (Exception ex) {
throw ex;
}
return venueList;
}

更新:

07-08 21:26:18.580: W/System.err(24365): java.lang.NullPointerException
07-08 21:26:18.580: W/System.err(24365): at com.android.guideme.GuideMeService$1.run(GuideMeService.java:86)

最佳答案

您在此处声明(不幸的是公开的)mFsqApp 变量:

public FoursquareApp mFsqApp;

但是您没有显示任何代码来为其赋值 - 因此它将具有默认值 null,当您取消引用它时会导致 NullPointerException。在取消引用它之前,您需要为其分配一个非空值,例如与

mFsqApp = new FoursquareApp();

...或使用在其他地方传递的值(例如传递给构造函数)。很难判断其中哪一个适合这种情况,但是某物必须为其分配一个非空值。您说类似的代码在 Activity 的早期工作 - 所以回顾一下该代码并查看该值来自哪里。

(然后改进您的代码以避免公共(public)变量,尽可能避免静态变量,避免捕获Exception,避免在遇到异常时继续,除非您真的 处理它等)

关于java - 当我从 android 服务调用类时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com