0

基本的な Android バックグラウンド サービス アプリを実行します。なぜエラーが発生するのかよくわかりません(MainActivity.java). Error is at btnStart = (Button)findViewById(R.id.btnStart);

提供されたクイック フィックスでは、戻り値の型が 'void' に設定されていました。btnStop の場合、エラーはありません。

package com.example.backgroundservice;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.app.Service;

public class MainActivity extends Activity implements OnClickListener{




    btnStart = (Button)findViewById(R.id.btnStart); (ERROR HERE)
    btnStop = (Button) findViewById(R.id.btnStop);

btnStart.setonClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent serviceIntent = new Intent(MainActivity.this,MyService.class);
        startService(serviceIntent);
    }
});

btnStop.setonClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent serviceIntent = new Intent (MainActivity.this,MyService.class);
        stopService(serviceIntent);
    }
});

}

@Override
public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
}
}
4

4 に答える 4

2

中にあるはずonCreateです。

Button btnStart,btnStop; // should be delcared. i guess you do not have this
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            setContentView(R.layout.yourlayout);
            btnStart = (Button)findViewById(R.id.btnStart); // initialize here
            btnStop = (Button) findViewById(R.id.btnStop)
            ...// rest of the code

私はあなたが以下の外側onCreate(メソッドの外側)を持っていて、宣言していないと思いますbtnStart

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

しかし、最初にレイアウトを膨らませてからボタンを初期化する必要があると宣言したとしても、そうでなければ取得しますNUllPointerException

ボタンをクラスメンバーとして宣言し、onCreate上記のように初期化します

編集:

すでにリスナーの匿名内部クラスがあるため、実装する必要はなくOnClickListener、これを削除できます

@Override
public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
}

また、インポートステートメントが間違っています

これを交換

   import android.content.DialogInterface.OnClickListener;

   import android.view.View.OnClickListener;
于 2013-10-29T14:02:52.207 に答える
1

アクティビティの onCreate メソッドをオーバーライドし、その内容を設定する必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.theLayoutThatContains_R.id.btnStart);
}
于 2013-10-29T14:03:11.147 に答える
0

クラス本体内にメソッド本体に属するコードがあるため、エラーが発生します。Eclipse は構文エラーに気付き、コードをメソッド宣言に変更して「修正」することを提案します。最初の構文エラーでコンパイルが停止したため、それ以上の構文エラーは発生しません。

他の人が指示したように、このようなコードの正しい場所はアクティビティのonCreate()メソッドです。

于 2013-10-29T14:15:39.743 に答える