GSMCellLocation в Android заканчивается исключение - PullRequest
2 голосов
/ 27 января 2012

В моем приложении я использую класс GsmCellLocation, чтобы найти идентификатор ячейки и lac в конкретном экземпляре.

Я просто определил класс и отобразил соответствующие атрибуты для действия через TextView.

Кодовый раздел, который я использовал:

TextView textCID;
TextView textLAC;

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

   textCID= (TextView)findViewById(R.id.tv1);
   textLAC=(TextView)findViewById(R.id.tv2);

   TelephonyManager telph= (TelephonyManager)getSystemService(Testing2Activity.TELEPHONY_SERVICE);
   GsmCellLocation cellLocation= (GsmCellLocation)telph.getCellLocation();

   if (cellLocation != null) {

   int cid1=cellLocation.getCid();
   int lac1=cellLocation.getLac();
   Log.v("%%%%GGGGF", "Hello"); 
   String s=String.valueOf(cid1);
   String s1=String.valueOf(lac1);

   textCID.setText(s);
   textLAC.setText(s1);

   }

Раздел кода заканчивается исключением NullPointer ...

Ребята помогите пожалуйста ...

Журнал ошибок указан как:

01-27 12: 33: 57.802: E / AndroidRuntime (393): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 01-27 12: 33: 57.802: E / AndroidRuntime (393): java.lang.RuntimeException: Невозможно начать действие 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2663) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.os.Handler.dispatchMessage (Handler.java:99) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.os.Looper.loop (Looper.java:123) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread.main (ActivityThread.java:4627) 01-27 12: 33: 57.802: E / AndroidRuntime (393): в java.lang.reflect.Method.invokeNative (собственный метод) 01-27 12: 33: 57.802: E / AndroidRuntime (393): в java.lang.reflect.Method.invoke (Method.java:521) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 01-27 12: 33: 57.802: E / AndroidRuntime (393): в dalvik.system.NativeStart.main (собственный метод) 01-27 12: 33: 57.802: E / AndroidRuntime (393): вызвано: java.lang.NullPointerException 01-27 12: 33: 57.802: E / AndroidRuntime (393): по адресу sbc.testing.prjct.Testing2Activity.onCreate (Testing2Activity.java:27) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 01-27 12: 33: 57.802: E / AndroidRuntime (393): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627)

Ответы [ 2 ]

2 голосов
/ 26 июня 2013

Я столкнулся с той же проблемой.Причиной этого является то, что эмулятор не имеет реальной сети GSM или CDMA, поэтому объект GsmCellLocation может быть инициализирован нулем.Однако, когда я попробовал то же самое на живом устройстве с сетью GSM, оно работало без ошибок.

0 голосов
/ 04 ноября 2018

убедитесь, что вы запрашиваете разрешение

     if (
            ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED
            ) {
        //ask for permission
        askPermission();
    } 
     private void askPermission() {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQUEST);
}

тогда, конечно, вам нужно переопределить метод разрешения onRequest

     @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == LOCATION_REQUEST) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // do what need to be done

            Toast.makeText(this, "We have Permission onRequest", Toast.LENGTH_SHORT).show();
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                            != PackageManager.PERMISSION_GRANTED) {
                return;
            }


        }
    }
}
...