首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位置网络服务

位置网络服务
EN

Stack Overflow用户
提问于 2012-06-04 20:53:58
回答 1查看 231关注 0票数 0

我正在开发一个应用程序来显示网络提供商的所有详细信息,但我得到了错误,有人能帮我清除它吗?

logcat-file:

代码语言:javascript
复制
D/AndroidRuntime(308): Shutting down VMW/dalvikvm(308):threadid=1: thread exiting with  
uncaughtexception(group=0x4001d800)
E/AndroidRuntime(308): FATAL EXCEPTION: main
E/AndroidRuntime(308): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.LocationTest/com.LocationTest.LocationTestActivity}: 
java.lang.NullPointerException
E/AndroidRuntime(308):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
E/AndroidRuntime(308):at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(308):at 
android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(308):at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(308):at 
android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(308):at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(308)at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(308):at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(308):at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(308):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(308):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(308):at dalvik.system.NativeStart.main(Native 
Method)
E/AndroidRuntime(308): Caused by: java.lang.NullPointerException
E/AndroidRuntime(308):at android.app.Activity.findViewById(Activity.java:1637)
E/AndroidRuntime(308):at com.LocationTest.LocationTestActivity.
<init>(LocationTestActivity.java:18)
E/AndroidRuntime(308):at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(308):at java.lang.Class.newInstance(Class.java:1429)
E/AndroidRuntime(308):at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(308):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
E/AndroidRuntime(308):  ... 11 more
I/Process(308): Sending signal. PID: 308 SIG: 9

代码:

代码语言:javascript
复制
public class LocationTestActivity extends Activity implements LocationListener {
/** Called when the activity is first created. */
 LocationManager locman;
 String best; Location loc; TextView t=(TextView)findViewById(R.id.text);
 private static final String[] A = { "invalid" , "n/a" , "fine" , "coarse" };
 private static final String[] P = { "invalid" , "n/a" , "low" , "medium" ,
 "high" };
 private static final String[] S = { "out of service" ,
 "temporarily unavailable" , "available" };
 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   locman =(LocationManager)getSystemService(LOCATION_SERVICE);

    log("location Providers");
    dumpproviders();
    Criteria criteria=new Criteria();
    best=locman.getBestProvider(criteria,true);
    log("BestProviders"+best);
    log("Starting with last known location");
    loc=locman.getLastKnownLocation(best);
    dumpLocation(loc); 

}
protected void OnResume()
{
   super.onPause();
locman.requestLocationUpdates(best, 15000,1,this);
}
 protected void Onpause()
 {
    super.onPause();
    locman.removeUpdates(this);
 }



private void dumpproviders() {
    // TODO Auto-generated method stub
    List<String> providers=locman.getAllProviders();
    for(String provider:providers){
        dumpProvider(provider);
    }
}

private void dumpProvider(String providers) {
    // TODO Auto-generated method stub
    LocationProvider info=locman.getProvider(providers);
    StringBuilder buil=new StringBuilder();
    buil.append("LocationProvier[")
    .append("name=")
    .append(info.getName())
    .append("provider state")
    .append(locman.isProviderEnabled(providers))
    .append(",getAccuracy=" )
    .append(A[info.getAccuracy() + 1])
    .append(",getPowerRequirement=" )
    .append(P[info.getPowerRequirement() + 1])
    .append(",hasMonetaryCost=" )
    .append(info.hasMonetaryCost())
    .append(",requiresCell=" )
    .append(info.requiresCell())
    .append(",requiresNetwork=" )
    .append(info.requiresNetwork())
    .append(",requiresSatellite=" )
    .append(info.requiresSatellite())
    .append(",supportsAltitude=" )
    .append(info.supportsAltitude())
    .append(",supportsBearing=" )
    .append(info.supportsBearing())
    .append(",supportsSpeed=" )
    .append(info.supportsSpeed())
    .append("]" );
    log(buil.toString());
}
private void log(String string) {
    // TODO Auto-generated method stub
    t.append(string+"\n");
}
@Override
public void onLocationChanged(Location arg0) {
    // TODO Auto-generated method stub
    dumpLocation(loc);
}
private void dumpLocation(Location loc) {
    // TODO Auto-generated method stub
    if (loc == null)
        log("\nLocation[unknown]" );
        else
        log("\n" + loc.toString());
}
@Override
public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub
    log("\nProvider disabled: " + arg0);
}
@Override
public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub
    log("\nProvider enabled: " + arg0);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
    log("\nProvider status changed: " + provider + ", status="
            + S[status] + ", extras=" + extras);
}
EN

回答 1

Stack Overflow用户

发布于 2012-06-04 21:05:22

在类作用域中不能有以下代码行。

代码语言:javascript
复制
TextView t=(TextView)findViewById(R.id.text);

仅当特定视图已显示在屏幕上时,findViewByID方法才返回有效的视图对象,否则将返回NULL。

在您的例子中,您甚至在TextView可见之前就试图访问它,所以您得到了一个NullPointerException (检查日志中引发的第二个异常)

代码语言:javascript
复制
E/AndroidRuntime(308): Caused by: java.lang.NullPointerException
E/AndroidRuntime(308):at android.app.Activity.findViewById(Activity.java:1637)
E/AndroidRuntime(308):at com.LocationTest.LocationTestActivity. (LocationTestActivity.java:18)
E/AndroidRuntime(308):at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(308):at java.lang.Class.newInstance(Class.java:1429)
E/AndroidRuntime(308):at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(308):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
E/AndroidRuntime(308): ... 11 more I/Process(308): Sending signal. PID: 308 SIG: 9

在onCreate()方法中,在"setContentView(R.layout.main);“后面添加上一行,这样它就可以工作了,例如...

代码语言:javascript
复制
setContentView(R.layout.main);
t = (TextView) findViewByID(R.id.text);

仔细阅读错误日志,您将获得调试所需的所有信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10881664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档