Member 13926859 Ответов: 2

Выход нулевой точки в view.setonclicklistener


у меня есть эта проблема она показывает мне это erreur


07-27 10:15:09.177 4518-4518/com.example.android.projectdestage E/AndroidRuntime: фатальное исключение: main
Процесс: com.example.android.projectdestage, PID: 4518
java.lang.RuntimeException: не удается запустить activity ComponentInfo{com.example.android.projectdestage/com.example.android.projectdestage.MainActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' по ссылке на нулевой объект
в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
в android.app.ActivityThread.-wrap14(ActivityThread.java)
в android.app.ActivityThread$H. handleMessage(ActivityThread.java:1642)
в android.os.Handler.dispatchMessage(Handler.java:102)
на Андроид.ОС."Петля времени".петли(лупер.Ява:154)
в android.app.ActivityThread.main(ActivityThread.java:6776)
в java.lang.reflect.Method.invoke(собственный метод)
в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Вызванные: Java для.яз.NullPointerException: попытка вызвать виртуальный метод 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' по ссылке на нулевой объект
в com.example.android.projectdestage.В MainActivity.init2(в MainActivity.Ява:58)
в com.example.android.projectdestage.В MainActivity.метод onCreate(класс MainActivity.Ява:38)
в android.app.Activity.performCreate(Activity.java:6956)
на Андроид.приложение.Контрольно-измерительные приборы.callActivityOnCreate(контрольно-измерительные приборы.Ява:1126)
в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
в android.app.ActivityThread.-wrap14(ActivityThread.java) 
в android.app.ActivityThread$H. handleMessage(ActivityThread.java:1642) 
в android.os.Handler.dispatchMessage(Handler.java:102) 
на Андроид.ОС."Петля времени".петли(лупер.Ява:154) 
в android.app.ActivityThread.main(ActivityThread.java:6776) 
в java.lang.reflect.Method.invoke(собственный метод) 
в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 


пожалуйста любая помощь я не знаю как это исправить

Что я уже пробовал:

import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;

public class MainActivity extends AppCompatActivity


{

private Button sms;
private Button btnMap;


    private static final String TAG = "MainActivity";

    private static final int ERROR_DIALOG_REQUEST = 9001;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       this.setContentView(R.layout.activity_main);



        if(isServicesOK()){
            init();
            init2();
        }
    }


    private void init(){
        Button btnMap = (Button) findViewById(R.id.btnMap);
        btnMap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, MapActivity.class);
                startActivity(intent);

            }
        });
    }

    private void init2()
    {
        Button sms = (Button) findViewById(R.id.sms);
        sms.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent message = new Intent(MainActivity.this, MainActivity2.class);
                startActivity(message);
            }
        });
    }


  




    public boolean isServicesOK()
    {
        Log.d(TAG, "isServicesOK: checking google services version");

        int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this);

        if(available == ConnectionResult.SUCCESS)
        {
            // koulchi mli7 map request
            Log.d(TAG, "isServicesOK: Google Play Services is working");
            return true;
        }
        else if(GoogleApiAvailability.getInstance().isUserResolvableError(available))
        {
            //test d erreur
            Log.d(TAG, "isServicesOK: an error occured but we can fix it");
            Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR_DIALOG_REQUEST);
            dialog.show();
        }else
            {
            Toast.makeText(this, "You can't make map requests", Toast.LENGTH_SHORT).show();
            }
        return false;
    }



}

David Crow

sms является нулевым.

_Starbug_

ошибка находится в методе init2() и в строке 58.

2 Ответов

Рейтинг:
19

Richard MacCutchan

Посмотрите на ошибку, она ясно говорит вам, что объект является нулевым, который вы пытаетесь использовать для установки события прослушивателя OnClick. Так что используйте свой отладчик, чтобы понять, почему. Или вы можете просто проверить код Java и XML, чтобы увидеть, почему они не совпадают. В вашей программе есть только два экземпляра, поэтому проблема должна быть в одном из них.


Рейтинг:
11

Member 14897805

Обычно я не публикую посты, потому что тоже все делаю очень неправильно. Похоже, что вы пытаетесь позвонить в анонимный класс. Если вы сделаете свой объект кнопки окончательным, это может решить проблему.

У меня есть аналогичная проблема, когда нет ошибки в коде или xml-файле.

Попробовать это:

частная окончательной кнопку SMS;
приватная финальная кнопка btnMap;

частный недействительными инициализации(){
btnMap = (кнопка) findViewById(R. id.btnMap);
btnMap.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(Посмотреть Посмотреть) {
Intent intent = новое намерение(MainActivity.this, MapActivity.class);
startActivity(намерение);

}
});
}

частный недействительными init2()
{
sms = (кнопка) findViewById(R. id.sms);
sms.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(посмотреть V) {
Сообщение намерением = новое намерение(в MainActivity.это, MainActivity2.class);
startActivity(сообщение);
}
});


David Crow

Будь то sms является final или нет, ни чего не изменилось, что findViewById() возвращается null.