【问题标题】:android:onclick method doesn't workandroid:onclick 方法不起作用
【发布时间】:2016-04-25 09:46:34
【问题描述】:

xml代码:

 <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Invia"
            android:clickable="true"
            android:onClick="onClick1"
            android:id="@+id/invia" />

java代码:

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class CreazioneSondaggio extends AppCompatActivity   {

    String URL;
    private EditText titolo;
    private EditText sceltaA;
    private EditText sceltaB;
    private EditText sceltaC;
   private Button invio;
    private EditText server;
    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        titolo = (EditText) findViewById(R.id.titolo);
        sceltaA = (EditText) findViewById(R.id.A);
        sceltaB = (EditText) findViewById(R.id.B);
        sceltaC = (EditText) findViewById(R.id.C);
        server= (EditText) findViewById(R.id.server);
       invio = (Button) findViewById(R.id.invia);

       // invio.setOnClickListener(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_creazione_sondaggio);
    }

    private void inviodati() {
        ......
    }

    public void onClick1(View v) {
        Toast.makeText(CreazioneSondaggio.this, "ok", Toast.LENGTH_LONG).show();

           inviodati();



    }


}

错误:

进程:com.example.rober.registrazione,PID:21261 java.lang.IllegalStateException:无法执行方法 安卓:点击 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275) 在 android.view.View.performClick(View.java:5210) 在 android.view.View$PerformClick.run(View.java:21288) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5527) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 在 android.view.View.performClick(View.java:5210) 在 android.view.View$PerformClick.run(View.java:21288) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5527) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 引起:java.lang.NullPointerException:尝试调用虚拟 方法'android.text.Editable android.widget.EditText.getText()' 空对象引用 在 com.example.rober.registrazione.CreazioneSondaggio.inviodati(CreazioneSondaggio.java:48) 在 com.example.rober.registrazione.CreazioneSondaggio.onClick1(CreazioneSondaggio.java:87) 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 在 android.view.View.performClick(View.java:5210) 在 android.view.View$PerformClick.run(View.java:21288) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5527) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

我该如何解决?

【问题讨论】:

  • 请添加您的完整活动代码
  • 你在哪里使用 getText() ?,主要原因是空指针异常。

标签: java android android-layout


【解决方案1】:

更新你的 oncreate 方法

 protected void onCreate(Bundle savedInstanceState)  {
  super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_creazione_sondaggio);
        titolo = (EditText) findViewById(R.id.titolo);
        sceltaA = (EditText) findViewById(R.id.A);
        sceltaB = (EditText) findViewById(R.id.B);
        sceltaC = (EditText) findViewById(R.id.C);
        server= (EditText) findViewById(R.id.server);
       invio = (Button) findViewById(R.id.invia);

       // invio.setOnClickListener(this);


    }

【讨论】:

    【解决方案2】:

    这样做...

    super.onCreate(savedInstanceState);
            setContentView(R.layout.your_layout);
        InviaButton = (TextView) findViewById(R.id.invia);
    
         InviaButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
        //your_code
          }
        }
    

    【讨论】:

      【解决方案3】:

      Xml 布局:

       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Invia"
           android:clickable="true"
           android:id="@+id/invia" />
      

      将以下代码添加到您的活动中:

      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.your_layout);
      
              titolo = (EditText) findViewById(R.id.titolo);
              sceltaA = (EditText) findViewById(R.id.A);
              sceltaB = (EditText) findViewById(R.id.B);
              sceltaC = (EditText) findViewById(R.id.C);
              server= (EditText) findViewById(R.id.server);
              invio = (Button) findViewById(R.id.invia);
      
              invio.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Toast.makeText(CreazioneSondaggio.this, "ok", Toast.LENGTH_LONG).show();
                      // code
                  }
              });
      
          }
      

      【讨论】:

      • 现在用你的代码 java.lang.RuntimeException 说这个错误:无法启动活动 ComponentInfo{com.example.rober.registrazione/com.example.rober.registrazione.CreazioneSondaggio}:java.lang。 NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)”
      【解决方案4】:

      一旦布局膨胀为活动,您需要找到活动的每个视图,如下所示

          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_creazione_sondaggio);
      
          titolo = (EditText) findViewById(R.id.titolo);
          sceltaA = (EditText) findViewById(R.id.A);
          sceltaB = (EditText) findViewById(R.id.B);
          sceltaC = (EditText) findViewById(R.id.C);
          server= (EditText) findViewById(R.id.server);
      

      因为你已经使用属性 onClick 不需要启动按钮引用你可以直接做

       public void onClick1(View v) {
      
                 if(v.getId() == R.id.invia)
                 {
      
                 }
      
      
              }
      

      【讨论】:

        【解决方案5】:

        在这里阅读完整堆栈它说 java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' 您尚未初始化 EditText 但您正在使用 onClick 方法。试着弄清楚。

        【讨论】:

          猜你喜欢
          • 2013-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多