Невозможно запустить действие с помощью кнопки в Android, и правильно ли я повторно использую AnymoteClientService здесь?

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

07-11 17:33:27.250: E/AndroidRuntime(1675): java.lang.RuntimeException: невозможно запустить действие ComponentInfo{uk.co.myapp.gtvremote/uk.co.myapp.gtvremote.SlidepuzzleActivity}: java.lang .Исключение нулевого указателя

Не уверен, что я сделал неправильно, приветствую любые предложения и / или комментарии.

Также вы можете заметить из кода, что я пытаюсь повторно использовать AnymoteClientService. Я предполагаю, что то, как я сделал это здесь, правильно, не так ли? :

Выдержка из манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="uk.co.myapp.gtvremote"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <service android:name="com.example.google.tv.anymotelibrary.client.AnymoteClientService" >
        </service>

        <activity
            android:name="com.example.google.tv.anymotelibrary.connection.PairingActivity"
            android:configChanges="orientation"
            android:label="Pairing with TV"
            android:launchMode="singleTop" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SlidepuzzleActivity"
            android:label="@string/title_activity_slidepuzzle" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="true" />
    <uses-feature
        android:name="android.hardware.wifi"
        android:required="true" />

</manifest>

Выдержка из MainActivity.java:

Button testButton = (Button) findViewById(R.id.testButton);

...

testButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent myIntent = new Intent(MainActivity.this, SlidepuzzleActivity.class);
//THIS IS WHERE I THINK THE EXCEPTION IS BEING THROWN
                MainActivity.this.startActivity(myIntent);
            }
        });

SlidepuzzleActivity.java:

public class SlidepuzzleActivity extends Activity implements ClientListener{

    private AnymoteClientService mAnymoteClientService;
    private Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.slidepuzzle);

        ImageButton piece1x1 = (ImageButton) findViewById(R.id.piece1x1);
        ImageButton piece1x2 = (ImageButton) findViewById(R.id.piece1x2);
        ImageButton piece1x3 = (ImageButton) findViewById(R.id.piece1x3);
        ImageButton piece2x1 = (ImageButton) findViewById(R.id.piece2x1);
        ImageButton piece2x2 = (ImageButton) findViewById(R.id.piece2x2);
        ImageButton piece2x3 = (ImageButton) findViewById(R.id.piece2x3);
        ImageButton piece3x1 = (ImageButton) findViewById(R.id.piece3x1);
        ImageButton piece3x2 = (ImageButton) findViewById(R.id.piece3x2);
        ImageButton piece3x3 = (ImageButton) findViewById(R.id.piece3x3);

        Intent intent = new Intent(mContext, AnymoteClientService.class);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

    }

    private ServiceConnection mConnection = new ServiceConnection() {


        /*
         * ServiceConnection listener methods.
         */
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

            mAnymoteClientService = ((AnymoteClientService.AnymoteClientServiceBinder) service)
                    .getService();
            mAnymoteClientService.attachClientListener(SlidepuzzleActivity.this);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mAnymoteClientService.detachClientListener(SlidepuzzleActivity.this);
            mAnymoteClientService = null;   
        }

    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.slidepuzzle, menu);
        return true;
    }

    @Override
    public void onConnected(AnymoteSender anymoteSender) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnectionError() {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onDestroy() {
        if (mAnymoteClientService != null) {
            mAnymoteClientService.detachClientListener(this);
        }
        unbindService(mConnection);
        super.onDestroy();
    }


}

Ваше здоровье

ЗАПРОШЕННАЯ ТРАССА СТЕКА:

07-11 17:33:27.250: E/AndroidRuntime(1675): FATAL EXCEPTION: main
07-11 17:33:27.250: E/AndroidRuntime(1675): java.lang.RuntimeException: Unable to start activity ComponentInfo{uk.co.myapp.gtvremote/uk.co.myapp.gtvremote.SlidepuzzleActivity}: java.lang.NullPointerException
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.os.Looper.loop(Looper.java:137)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread.main(ActivityThread.java:4424)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at java.lang.reflect.Method.invokeNative(Native Method)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at java.lang.reflect.Method.invoke(Method.java:511)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at dalvik.system.NativeStart.main(Native Method)
07-11 17:33:27.250: E/AndroidRuntime(1675): Caused by: java.lang.NullPointerException
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.content.ComponentName.<init>(ComponentName.java:75)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.content.Intent.<init>(Intent.java:3175)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at uk.co.myapp.gtvremote.SlidepuzzleActivity.onCreate(SlidepuzzleActivity.java:39)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.Activity.performCreate(Activity.java:4465)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-11 17:33:27.250: E/AndroidRuntime(1675):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
07-11 17:33:27.250: E/AndroidRuntime(1675):     ... 11 more

Я отметил в отрывке SlidepuzzleActivity.java, где исключение выбрасывается с помощью //ЭТО ГДЕ Я ДУМАЮ, ЧТО ИСКЛЮЧЕНИЕ ВЫБИРАЕТСЯ


person MYR    schedule 11.07.2012    source источник
comment
Предоставьте полную трассировку стека вместе с указанием того, где в исходном коде возникает исключение.   -  person CommonsWare    schedule 11.07.2012
comment
Почему NullpointerException?   -  person Samir Mangroliya    schedule 11.07.2012
comment
Добавлена ​​трассировка и комментарий // ЭТО ГДЕ Я ДУМАЮ, ЧТО ИСКЛЮЧЕНИЕ БРОСАЕТСЯ, где, как я думаю, оно вызвано.   -  person MYR    schedule 11.07.2012
comment
@MYR: Кстати, в своем манифесте вы установили блоки <intent-filter> для MainActivity и SlidepuzzleActivity с действием MAIN и категорией LAUNCHER. Только один Activity должен иметь настройки MAIN/LAUNCHER.   -  person Squonk    schedule 11.07.2012
comment
Это вызовет мою проблему? Или это просто условность, которую нужно соблюдать?   -  person MYR    schedule 11.07.2012
comment
Что такое строка 39 в действии SlidePuzzle, это строка, которая получает нулевой указатель.   -  person FoamyGuy    schedule 11.07.2012
comment
Да, как вы заметите из ответа, который я принял ниже, мне нужно было установить mContext на это.   -  person MYR    schedule 11.07.2012


Ответы (1)


Насколько я вижу, mContext имеет значение null; и это может быть причиной этого исключения при создании экземпляра Intent.

person Comic Sans MS Lover    schedule 11.07.2012
comment
Если вы посмотрите на журнал, нулевой указатель находится в onCreate(), и ваша переменная экземпляра mContext никогда не была инициализирована, когда вы ссылались на нее... - person Joel; 11.07.2012
comment
Спасибо, Габриэль Касадо! Вы не поверите, сколько копаний я проделал, чтобы выяснить, что я упустил. Является ли то, как я повторно использую что-либо, правильным в этом? - person MYR; 11.07.2012
comment
@MYR Если я понимаю ваш вопрос, я думаю, вы можете просто использовать SlidepuzzleActivity.this, чтобы получить контекст, но нет ничего плохого (насколько я знаю) в использовании переменной для его сохранения, на самом деле код более читабелен. - person Comic Sans MS Lover; 11.07.2012
comment
Круто, я думаю, что мне, вероятно, следует опубликовать еще один отдельный вопрос о правильном способе повторного использования AnymoteService, потому что я не уверен, как мне начать новую активность и сохранить имеющуюся пару, как я написал код на данный момент, я мне придется повторно подключиться, когда начнется моя новая деятельность ... конечно, лучший способ! - person MYR; 11.07.2012