2017-02-18 8 views
-3
package com.francesco.provadinuovo; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

    Button button; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     button =(Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       System.out.println("Welcome!"); 

      } 
     }); 
    } 
} 

問題がある: 2月18日14時32分30秒:起動MainActivity $ adbのプッシュC:\ Users \ユーザー\ AndroidStudioProjects \ Provadinuovo \アプリの\ビルド\出力を開始\ APK \ APP-debug.apk /データ/ローカルの/ tmp/com.francesco.provadinuovo $ adbのシェル午後-rインストール "/data/local/tmp/com.francesco.provadinuovo" 成功私の最初のアプリは動作しません、私を助けることができますか?

$ adbのシェルの午前は、-n開始「com.francesco .provadinuovo/com.francesco.provadinuovo.MainActivity "-a android.intent.action.MAIN -c android.intent.category.LAUNCHER クライアントがまだ準備中ではありません。プロセスがオンラインになることを待ちます。 デバイスエミュレータでプロセス2354に接続しました。 -5554 W/System:ClassLoaderは未知のパスを参照しています:/data/app/com.francesco.provadinuovo-1/lib/x86 W/art:Android 4.1より前は、android.graphics.PorterDuffColorFilterメソッドとandroid.support.graphics.drawable.VectorDrawableCompatメソッド.updateTintFilter(android.graphics.PorterDuffColorFilter、android.content.res.ColorStateList、android.graphics.PorterDuff $ Mode)は、android.graphics.drawable.Drawableのpackage-privateメソッドを間違ってオーバーライドします。 I/OpenGLRenderer:初期化されたEGL、バージョン1.4 D/OpenGLRenderer:スワップ動作1 E/EGL_emulation:TID 2445:eglSurfaceAttrib(1146):エラー0x3009(EGL_BAD_MATCH) W/OpenGLRenderer:表面0x971ec920にEGL_SWAP_BEHAVIORの設定に失敗しました、エラー= EGL_BAD_MATCH

+0

チュートリアルをもう一度読んでみてください。 'button.findViewById(R.id。ボタンを押しても)意味が成り立ちません –

答えて

2

2行をスワップする必要があります。

findViewById(R.id.button); 
setContentView(R.layout.activity_main); 

XMLを用いonCreate

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

代替ソリューションにおけるボタン部材変数

setContentView(R.layout.activity_main); 
button = (Button) findViewById(R.id.button) 

し、割り当てます。アクティビティ内のメソッドを明示的に呼び出すことができ、ボタンをクリックしたときのコールバックとして機能させることができます。 android:onClick="doAction"。あなたの活動では、そのメソッドを追加するだけです。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void doAction(View v){ 
    System.out.println("Welcome!"); 
} 
+0

私はそれをやろうとしますが、同じエラーがあります – frlaka

+0

ボタンには@friakaが割り当てられています –

+0

ありがとうございました。 – Enzokie

4

最初にsetContentViewを呼び出す必要があります。その後、「findViewById」を使用できます。また

findViewByIdとマイナー間違い、あなたが活動中でそれを呼び出す必要はなく、ボタンの上に、次にあなたが使用しようとしているものは何でもに戻ったビューをキャスト:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       System.out.println("Welcome!"); 

      } 
     }); 
    } 
+0

^作品は言及していません。レイアウト> activity_main.xmlを見て、ボタンを正しいIDで実装する必要があります。 (ちょうどテストされ、それは正常に動作します) – user7568042

+0

ありがとう、今それは働く...しかし、私は別のprobleE/EGL_emulationを持っています:2451:eglSurfaceAttrib(1146):エラー0x3009(EGL_BAD_MATCH) W/OpenGLRenderer:EGL_SWAP_BEHAVIOR表面に0x971ec920、エラー= EGL_BAD_MATCHm: – frlaka

+0

@frlakaあなたの投稿を編集し、あなたがコメントではなく、あなたが持っている問題を追加してください。 – JonZarate

0

(編集:追加キャスト)

は、私が思う

button.findViewById(R.id.button); 
setContentView(R.layout.activity_main); 
を置き換えてください。

setContentView(R.layout.activity_main); 
button = (Button) findViewById(R.id.button); 

最初の行はレイアウトを作成し、2番目の行はボタンウィジェットへの参照をbuttonに格納します。nullです。

関連する問題