我正在尝试从内容提供商处获取活动,然后更新我的父视图,但由于某种原因,此行
if (c.moveToFirst()== false)
每当我尝试运行应用程序时,都会抛出NullPointerException。虽然我在初始化
之前已向游标对象添加了断言 Cursor c = cr.query(EarthquakeProvider.CONTENT_URI, null, null, null, null, null);
assert c != null;
然而我的android调试器将其识别为Null值。这是完整的方法..
@TargetApi(16)
private void loadQuakesFromProvider() {
// Clear the existing earthquake array
quakeArrayList.clear();
ContentResolver cr = getContentResolver();
// Return all the saved earthquakes
Cursor c = cr.query(EarthquakeProvider.CONTENT_URI, null, null, null, null, null);
assert c != null;
if (c.moveToFirst()== false) {
do {
// Extract the quake details.
Long datems = c.getLong(EarthquakeProvider.DATE_COLUMN);
String details;
details = c.getString(EarthquakeProvider.DETAILS_COLUMN);
Float lat = c.getFloat(EarthquakeProvider.LATITUDE_COLUMN);
Float lng = c.getFloat(EarthquakeProvider.LONGITUDE_COLUMN);
Double mag = c.getDouble(EarthquakeProvider.MAGNITUDE_COLUMN);
String link = c.getString(EarthquakeProvider.LINK_COLUMN);
Location location = new Location("dummy");
location.setLongitude(lng);
location.setLatitude(lat);
Date date = new Date(datems);
Quake q = new Quake(date, details, location, mag, link);
addQuakeToArray(q);
} while (c.moveToNext());
}
c.close();
}
此处还有问题的堆栈跟踪
07-20 17:46:23.526 20526-20526/com.quakes.user.mapquake E/ActivityThread: Failed to find provider info for com.paad.provider.earthquake
07-20 17:46:23.526 20526-20526/com.quakes.user.mapquake E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.quakes.user.mapquake, PID: 20526
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.quakes.user.mapquake/com.quakes.user.mapquake.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249)
at android.app.ActivityThread.access$800(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5113)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.quakes.user.mapquake.MainActivity.loadQuakesFromProvider(MainActivity.java:331)
at com.quakes.user.mapquake.MainActivity.onCreate(MainActivity.java:105)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249)
at android.app.ActivityThread.access$800(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5113)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: java.net.UnknownHostException: Unable to resolve host "earthquake.usgs.gov": No address associated with hostname
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:214)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.quakes.user.mapquake.MainActivity$retrieveEarthquakeData.doInBackground(MainActivity.java:211)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at com.quakes.user.mapquake.MainActivity$retrieveEarthquakeData.doInBackground(MainActivity.java:197)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.lang.Thread.run(Thread.java:841)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at libcore.io.Posix.getaddrinfo(Native Method)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
07-20 17:46:23.556 20526-20542/com.quakes.user.mapquake W/System.err: ... 19 more
答案 0 :(得分:0)
First, check that you have the Assert function correclt imported
public static void main(String[] args) {
String regexp = "(?:a)";
Task t = new Task(regexp); // error
t.process();
}
class Task {
private String origin;
public Task() {
}
public Task(String origin) {
this.origin = origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public String getOrigin() {
return origin;
}
int length = origin.length(); //NullPointerException
...
您可以始终使用import static junit.framework.Assert.*;
,具有相同的整体效率。
另请注意,您的if(c != null){...} else {Log.e("src","msg")}
会导致:
java.net.UnknownHostException:无法解析主机“earthquake.usgs.gov”:没有与主机名关联的地址
请改用完整的网址。