2014-01-22 59 views
0

我有两个类,一个是位置,第二个是MainActivity,我想要做的是使用位置中的方法获取活动类中的纬度类,下面是位置类:活动中的另一个类的调用方法返回null

public class locac implements LocationListener { 
    public Context Ctx; 
    private final Context context; 

    public locac (Context context) { 
     this.context=Ctx; 
    } 

    public int GetLat() { 
     LocationManager manag; 
     manag=(LocationManager)Ctx.getSystemService(Ctx.LOCATION_SERVICE); 
     Location alfa=manag.getLastKnownLocation(manag.GPS_PROVIDER); 
     return (int) (alfa.getLatitude()); 
    } 

,这里是在MainActivity类的部分

locac nova=new locac(this.m); 
int latitu=nova.GetLat(); 
Context m; 
Toast.makeText(getApplicationContext(), latitu, Toast.LENGTH_LONG).show(); 

我得到的错误是:

Caused by: java.lang.NullPointerException 
at com.example.alarma.locac.GetLat(locac.java:71) 

我猜的背景下返回null,但不明白为什么

PS

我加入的全部活动类:

public class MainActivity extends Activity { 

public static final String content="test"; 
public static final Integer kom=2; 
Context m; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


dbadapter mkola=new dbadapter(MainActivity.this); 
mkola.openToWrite(); 


locac nova=new locac(MainActivity.this); 
int latitu=nova.GetLat(); 

Toast.makeText(getApplicationContext(), 
     latitu, Toast.LENGTH_LONG).show(); 


mkola.insert(content); 










} 



} 
+0

什么是'this.m'?给变量一个体面的名字,而不是'm'。顺便说一句,你应该阅读[Java命名约定](http://www.oracle.com/technetwork/java/codeconv-138413.html)。 – m0skit0

+0

@Nfear感谢您的编辑。这是一个MESS! –

回答

2

在你的构造,该行:

this.context=Ctx; 

什么都不做,因为Ctxthis.context同时指向实例变量因此当你创建你的对象时(对象的默认值)是null

它应该是:

private final Context context; //remove this line 
public Context Ctx; 


public locac (Context context){ 
    this.Ctx = context; 
} 

另外要注意,getLastKnownLocation也可以返回null

P.S:尝试尊重命名约定。

+0

@ m0skit0不,因为他明确使用'this.',所以它指的是字段而不是构造函数参数。无论如何,这个任务都是交换的。 –

+0

感谢您的解释,我做了更改,但该程序仍然崩溃与GetLat – user2557930

+0

@ user2557930 NullPointer正如我所说'getLaskKnownLocation'可以返回null。错误发生的路线是什么?并且'this.m'不为null? –

0

我没有看到任何初始化Ctx。

public Context Ctx; 

public locac (Context context){ 
    this.context=Ctx; 
} 
相关问题