-1

私はdrowingアプリを書いています。次の問題が発生した時点で、「R.layout.activity_colors_prefs」の「redBtn」をクリックすると次のエラーが発生します。

   08-26 03:27:31.576: E/AndroidRuntime(706): FATAL EXCEPTION: main
    08-26 03:27:31.576: E/AndroidRuntime(706): java.lang.NullPointerException
    08-26 03:27:31.576: E/AndroidRuntime(706):  at com.example.drawview.ChooseColor$1.onClick(ChooseColor.java:43)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.view.View.performClick(View.java:4084)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.view.View$PerformClick.run(View.java:16966)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.os.Handler.handleCallback(Handler.java:615)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.os.Handler.dispatchMessage(Handler.java:92)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.os.Looper.loop(Looper.java:137)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at android.app.ActivityThread.main(ActivityThread.java:4745)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at java.lang.reflect.Method.invoke(Method.java:511)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    08-26 03:27:31.576: E/AndroidRuntime(706):  at dalvik.system.NativeStart.main(Native Method)

デバッグモードによると、問題は次のコマンドにあります。

  • view_a.setdrawColor(Color.RED);

次のクラスで

public class ChooseColor extends Activity  {
    //View
    private DrawingView view_a;

    //Button
    Button redBtn;
    public int colorPref= Color.BLACK;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_colors_prefs);
        redBtn = (Button) findViewById(R.id.redColr);
        redBtn.setOnClickListener(myButtonListener);
        view_a=(DrawingView) findViewById(R.id.drawingView);
    }

    public int getColorPref() {
        return colorPref;
    }


    private OnClickListener myButtonListener = new OnClickListener() {

        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.redColr:
                Toast.makeText(getBaseContext(), "RED", Toast.LENGTH_SHORT).show();
                view_a.setdrawColor(Color.RED);     
                break;
            default:
                break;
            }

        }
    };

The method "setdrawColor" is the next:

public void setdrawColor(int color) 
{ 
   //create a copy of bitmap before changing the paint color 
     bitmap = Bitmap.createBitmap(bitmap); 
     canvas.setBitmap(bitmap); 
     paint.setColor(color); 
}

「setdrawColor」は、「DrawingView」と呼ばれる他のアクティビティにあります。「DrawingView」は描画を担当し、Viewを拡張し、Activityを拡張しません。

何が問題なのか教えていただけますか?私は何が間違っているのですか?

4

1 に答える 1

2

メソッドを呼び出して結果を報告する前にこれを行ってください

if (view_a != null) {
  view_a.setdrawColor(Color.RED);
} else {
  Log.e("ChooseColor","view_a is null!");
}

view_aが正しく設定されていないと思います。これを確認できますか?

于 2012-08-26T05:09:56.463 に答える