Android - requestLocationUpdates вызывает ожидаемую ошибку идентификатора

РЕДАКТИРОВАТЬ: Обратите внимание, что, хотя я получил ответ, я не понимаю, что не так и почему решение это исправляет. Я все еще ищу опровержение ...

Я получаю сообщение об ошибке:

error: (identifier) expected

на линии

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

где ожидаемый идентификатор указывает на "(".

[Примечание: на самом деле у меня четыре из этих ошибок, указывающих на «(», «0», «0» и «)».]

Я всегда получаю эту ошибку, когда ошибаюсь с синтаксисом, но на этот раз я не могу ее найти. Мой код относительно короткий, поэтому я пишу его, но, пожалуйста, знайте, что код работает полностью нормально, когда я закомментирую оскорбительную строку выше.

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View.*;
import android.view.View;
import android.content.Context;
import java.lang.CharSequence;
import android.widget.Toast;
import android.location.*;


public class Entrance extends Activity
{

/** Called when the activity is first created. */
@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button bGPS = (Button)findViewById(R.id.button_gps);
        bGPS.setOnClickListener(bGPSListener);
    }

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

LocationListener locationListener = new LocationListener()
{
    public void onLocationChanged(Location location)
    {
        Context context = getApplicationContext();
        CharSequence text = "Location found.";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
};

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);   

private OnClickListener bGPSListener = new OnClickListener()
{
    public void onClick(View v)
    {
        Context context = getApplicationContext();
        CharSequence text = "Hello toast!";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    }
};
}

person sdasdadas    schedule 14.03.2012    source источник


Ответы (2)


вы не можете просто вызвать метод внутри класса, по крайней мере, поместите его в отдельный раздел, подобный этому

{
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);   
}
person mkso    schedule 14.03.2012
comment
Это сработало! Но почему? Он находится в классе Entrance, разве он не должен работать? Что делает изоляция? - person sdasdadas; 15.03.2012
comment
просто заключить его в фигурные скобки не поможет. Весь код Java, кроме объявлений переменных, должен находиться в методе или блоке static. - person zapl; 15.03.2012
comment
stackoverflow .com / questions / 241088 / Видно просто ограничивает объем строки? - person sdasdadas; 15.03.2012
comment
В Интернете говорят, что это своего рода конструктор docs.oracle.com/javase/ tutorial / java / javaOO / initial.html такого раньше не видел :) - person zapl; 15.03.2012

Строка кода находится «вне» любого метода в классе. Вы можете присвоить его возвращаемое значение переменной-члену, что позволит ему находиться в этой строке, но это считается «плохим тоном» в программировании.

Переместите вызов в метод, который будет вызывать ваш класс.

person daniel    schedule 04.10.2012