2012-06-16 32 views
-1

我试图一个开发application..following是一个片段Android的Java错误

class metro_nodes { 
public String station; 
public GeoPoint point; } 

public class mainscreen extends MapActivity { 
/** Called when the activity is first created. */ 

MapController controller; 
double latitude,longitude; 
LocationManager loc; 
Location lastknownloc; 
LocationListener loclistener; 
List<GeoPoint> geopoints = new ArrayList<GeoPoint>(); 
MapView mapView; 
private LinkedList<metro_nodes> station_location = new LinkedList<metro_nodes>(); 
metro_nodes anand_nagar; 
anand_nagar.station = "anand_nagar"; 
    } 

现在在倒数第二行的捐赠 - 站“标志的语法错误‘’,VariableDeclaratorId预计此令牌后“

如果我把大括号括在这个语句,然后错误得到删除..但然后我得到java lang空指针异常... 什么是problm?

+5

你或许应该尝试做的是涉及到的东西这个复杂的应用之前学习一些基本的Java。这会让你自己更容易。 – Austin

回答

0

你还没有发布代码给你的语法错误......但我猜测你得到了空指针异常,因为你从未初始化任何“metro_nodes”对象。

例如:

// This is a helper class 
class MetroNode { 
    public String station; 
    public GeoPoint point; 

    public MetroNode (String station, GeoPoint point) { 
    this.station = station; 
    this.point = point; 
    } 
} 

// This is the module's main class 
public class MainScreen extends MapActivity { 

    // This is public and private data for each class instance 
    private LinkedList<MetroNode> station_location = null; 

    // This is the activity's initialization 
    public void onCreate(Bundle savedInstanceState) 
    station_locations = new LinkedList<MetroNode>(); 
    MetroNode metroNode = new MetroNode ("anand_nagar", new GeoPoint (1.00, 2.00)); 
    station_locations.add (metroNode); 
    ... 
+1

你不应该创建活动的构造函数...使用onCreate ... –

+1

@Dheeresh辛格:点好了 - 我没有注意到上课恰巧是Android的“活动”。我的观点是*每个*对象都需要被“创建”(它不会仅仅由“魔术”发生),并且每个类都需要一些初始化方法(通常是构造函数)。我认为OP的问题更多的是“Java 101”,而不是Android编程本身。恕我直言...... – paulsm4

+0

感谢您的回复......我的一个非常愚蠢的错误... – vigenere

0

空指针的赎罪是因为你还没有使用装箱新

metro_nodes anand_nagar; 
anand_nagar = new metro_nodes();//<----------------need this line to avoid NPE 
anand_nagar.station = "anand_nagar"; 

,并请遵循标准,如类名metro_nodes可变anand_nagar的情况下应该是这样MetroNode在java中.....

public class MainScreen extends MapActivity { 


    private MapController mController; 
    private double mLatitude,mLongitude; 
    private LocationManager mLoc; 
    private Location mLastknownloc; 
    private LocationListener mLoclistener; 

    private MapView mMapView; 
    private LinkedList<MetroNode> mStationLocations; 
    MetroNode mAnandNagar; 


    //in general we use cunstructor for initliaztion but in android we usesonCreate 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // ..other code .............. 

     List<GeoPoint> geoPoints = new ArrayList<GeoPoint>(); 
     mStationLocations = new LinkedList<MetroNode>(); 
     mAnandNagar = new MetroNode(); 
     mAnandNagar.setStation("anand_nagar"); 
    } 
} 

class MetroNode { 
    private String station; 
    private GeoPoint point; 

    public MetroNode(){ 
     super();  
    } 

    public MetroNode(String station, GeoPoint point) { 
     super(); 
     this.station = station; 
     this.point = point; 
    } 

    public String getStation() { 
     return station; 
    } 
    public void setStation(String station) { 
     this.station = station; 
    } 
    public GeoPoint getPoint() { 
     return point; 
    } 
    public void setPoint(GeoPoint point) { 
     this.point = point; 
    } 




} 
+0

难道你不觉得三十行,四个方法,两个构造函数和调用“super()”(甚至没有基类的时候)对于本质上是两字段的数据结构只是稍微有点过分吗? – paulsm4

+0

感谢您的回复...我的部分非常愚蠢的错误... – vigenere

1

您有类字段声明,第二行是不属于变量声明部分的语句 - 必须作为方法/构造函数的一部分来完成。

通过将它包含在大括号中,实际上是创建了一个类初始化块,但是在将任何实例分配给NPE之前尝试访问anand_nagar变量。 Austin是对的 - 你似乎错过了一些基本的Java编程知识,所以也许你应该先从一些Java教程开始:http://docs.oracle.com/javase/tutorial/