java - 空指针搜索 findViewById android 应用程序 Java

标签 java android eclipse

问题

您好,我在引用我正在制作的 Android 应用程序上的按钮时遇到问题。问题是引用按钮的空指针,我很困惑为什么会发生这种情况。另一个类上有一个非常相似的引用,我已将其包含在内以供引用(welcomeScreen.java 的 onTestButtonClickr)

编辑

我发现如果我更改 setContentView(R.layout.activity_in_game);设置ContentView(R.layout.fragment_in_game);空指针消失,但我对按钮所做的任何更改都不起作用

日志猫

04-14 13:13:40.280: D/dalvikvm(838): Not late-enabling CheckJNI (already on)
04-14 13:13:43.330: D/dalvikvm(838): GC_FOR_ALLOC freed 72K, 5% free 2993K/3132K, paused 167ms, total 169ms
04-14 13:13:44.280: D/dalvikvm(838): GC_FOR_ALLOC freed 3K, 5% free 3382K/3524K, paused 154ms, total 154ms
04-14 13:13:45.310: D/dalvikvm(838): GC_FOR_ALLOC freed 8K, 3% free 3802K/3916K, paused 194ms, total 194ms
04-14 13:13:45.590: D/gralloc_goldfish(838): Emulator without GPU emulation detected.
04-14 13:13:59.570: I/Choreographer(838): Skipped 33 frames!  The application may be doing too much work on its main thread.
04-14 13:14:01.030: D/AndroidRuntime(838): Shutting down VM
04-14 13:14:01.030: W/dalvikvm(838): threadid=1: thread exiting with uncaught exception (group=0xb2aabba8)
04-14 13:14:01.080: E/AndroidRuntime(838): FATAL EXCEPTION: main
04-14 13:14:01.080: E/AndroidRuntime(838): Process: com.moconnell.thehacker, PID: 838
04-14 13:14:01.080: E/AndroidRuntime(838): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.moconnell.thehacker/com.moconnell.thehacker.InGame}: java.lang.NullPointerException
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.os.Handler.dispatchMessage(Handler.java:102)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.os.Looper.loop(Looper.java:136)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread.main(ActivityThread.java:5017)
04-14 13:14:01.080: E/AndroidRuntime(838):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 13:14:01.080: E/AndroidRuntime(838):  at java.lang.reflect.Method.invoke(Method.java:515)
04-14 13:14:01.080: E/AndroidRuntime(838):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-14 13:14:01.080: E/AndroidRuntime(838):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-14 13:14:01.080: E/AndroidRuntime(838):  at dalvik.system.NativeStart.main(Native Method)
04-14 13:14:01.080: E/AndroidRuntime(838): Caused by: java.lang.NullPointerException
04-14 13:14:01.080: E/AndroidRuntime(838):  at com.moconnell.thehacker.InGame.generateImages(InGame.java:195)
04-14 13:14:01.080: E/AndroidRuntime(838):  at com.moconnell.thehacker.InGame.onCreate(InGame.java:64)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.Activity.performCreate(Activity.java:5231)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-14 13:14:01.080: E/AndroidRuntime(838):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-14 13:14:01.080: E/AndroidRuntime(838):  ... 11 more
04-14 13:14:03.760: I/Process(838): Sending signal. PID: 838 SIG: 9

有错误的类

package com.moconnell.thehacker;

import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.ResourceBundle;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.os.Build;


public class InGame extends ActionBarActivity {
    //public ImageButton mBtn;
    ImageButton currentImage;
    //public ArrayList<Drawable> j;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_in_game);

        //mBtn = (ImageButton) findViewById(R.id.ImageButton1_2);
        //mBtn.setImageResource(R.drawable.fat_banana);

//      
//
//      btn.setOnClickListener(new View.OnClickListener() {
//          @Override
//          public void onClick(View v) {
//              btn.setBackgroundColor(Color.GREEN);
//              //evaluateSubmission(v);
//          }
//      });



//      
//      Resources resources = com.moconnell.thehacker.WelcomeScreen.getResources();
//       j= new ArrayList<Drawable>();
//       j.add(resources.getDrawable(R.drawable.a_button));
//       j.add(resources.getDrawable(R.drawable.b_button));
//       j.add(resources.getDrawable(R.drawable.c_button));
//       j.add(resources.getDrawable(R.drawable.d_button));
//       j.add(resources.getDrawable(R.drawable.e_button));
//      
        generateImages();

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.in_game, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_in_game,
                    container, false);
            return rootView;
        }
    }

    //final TextView txtDir = (TextView) findViewById(R.id.txtDirections);
    public void onTestButtonClickr(View view) 
    {

        startActivity(new Intent("com.moconnell.thehacker.WelcomeScreen"));

    }
    public void click(View v)
    {
        //txtDir.setText("eed");//startActivity(new Intent("com.moconnell.thehacker.InGame"));

    }

    public void evaluateButton(View view) 
    {
         ImageButton b = (ImageButton)view;

         currentImage = (ImageButton)findViewById(R.id.ImageButton1_6);
            Log.v("", "currentImage:" + currentImage.getResources());
         //Log.v("", "buttnID:" + b.getId());
         if( b.getId()==R.id.ImageButton1_5)
             Log.v("", "1,5");
         if( b.getId()==R.id.ImageButton2_5)
             Log.v("", "2,5");
         if( b.getId()==R.id.ImageButton3_5)
             Log.v("", "3,5");
         //Log.v("","buttonpressed:"+ b.getdi);



    }

    public void generateImages() 
    {


        ImageButton b16 = (ImageButton)findViewById(R.id.ImageButton1_6);


        Log.v("", "b16:" + b16.toString());
        Log.v("", "pic:" + com.moconnell.thehacker.WelcomeScreen.j.get(1));


        // b12.setImageDrawable(com.moconnell.thehacker.WelcomeScreen.j.get(1));

\
         //int id = getResources().getIdentifier("thehacker/drawable/" + "a_button.png", null, null); 
        // b12.setImageDrawable(resources.getDrawable(R.drawable.e_button));
        //b13.setImageResource(id);
        // b14.setImageDrawable(j.get(2));
//      Log.v("", b13.toString());
//      Log.v("", j.get(1));


    }

}

其他可供引用的类

package com.moconnell.thehacker;

import java.util.ArrayList;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.os.Build;

public class WelcomeScreen extends ActionBarActivity {


    public Button btnNewGame; 
    public Button mBtn;
    public static ArrayList<Drawable> j;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btnNewGame = (Button) findViewById(R.id.btnNewGame);
        //btnNewGame.setOnClickListener(this);
        ////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////
//      Button toggleButton = (Button) findViewById(R.id.btnHighScore);
//      final ImageView img = (ImageView) findViewById(R.id.ImageView01);
//        toggleButton.setOnClickListener(
//
//        new View.OnClickListener() {
//
//            public void onClick(View v) {
//              img.setImageResource(R.drawable.fat_banana);
//            }
//
//        });
        //////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////


        Resources resources = getResources();
         j= new ArrayList<Drawable>();
         j.add(resources.getDrawable(R.drawable.a_button));
         j.add(resources.getDrawable(R.drawable.b_button));
         j.add(resources.getDrawable(R.drawable.c_button));
         j.add(resources.getDrawable(R.drawable.d_button));
         j.add(resources.getDrawable(R.drawable.e_button));



        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }

    public void onTestButtonClick(View view) 
    {
        startActivity(new Intent("com.moconnell.thehacker.InGame"));
    }   

    public void highScores(View view) 
    {

    }   

    public void onTestButtonClickr(View view) 
    {

         Button b = (Button)view;
         String buttonText = b.getText().toString();
         Log.v("", "butText:" + buttonText);
         b.setText("cc");


         Log.v("", "buttnID:" + b.getId());
         if( b.getId()==R.id.btnNewGame)
             Log.v("", "thsi is the new game button");
         if( b.getId()==R.id.btnHighScore)
             Log.v("", "thsi is the high scores button");

         ImageView i = (ImageView)findViewById(R.id.ImageView01);
        // .setImageResource(R.drawable.fat_banana);
         Log.v("", "dispImg:" + i.getId());
         Resources resources = getResources();
         //i.setImageDrawable(resources.getDrawable(R.drawable.fat_banana));

         i.setImageDrawable(j.get(1));
        // if(buttonText.equals("View High Scores"))
            //   startActivity(new Intent("com.moconnell.thehacker.InGame"));
    }   

//  private void empezarNewGame()
//  {
//      
//  }
//  


}

fragment_ingame

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:background="@drawable/background_tron"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.moconnell.thehacker.WelcomeScreen"
    tools:ignore="MergeRootFrame" 
    android:orientation="vertical">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingTop="10dp" 
        android:gravity="center">

        <Button
            android:id="@+id/buttonReturn"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:onClick="onTestButtonClickr"
             />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="53dp"
            android:onClick="click"
            android:src="@drawable/a_button" 
            android:gravity="center"/>

        <TableRow
            android:id="@+id/tableRow01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:gravity="center">

            <ImageButton
                android:id="@+id/ImageButton1_6"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/a_display" />

            <ImageButton
                android:id="@+id/ImageButton2_6"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/b_display" />

            <ImageButton
                android:id="@+id/ImageButton3_6"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/c_display" />

            <ImageButton
                android:id="@+id/ImageButton4_6"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/d_display" />

            <ImageButton
                android:id="@+id/ImageButton5_6"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/e_display" />

        </TableRow>

        <TextView
            android:id="@+id/txtDirections"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Enter the above code open lock"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:gravity="center" />

        <TableRow
            android:id="@+id/TableRow02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center">

            <ImageButton
                android:id="@+id/ImageButton1_5"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton2_5"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton3_5"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton4_5"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton5_5"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

        </TableRow>

        <TableRow
            android:id="@+id/TableRow03"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <ImageButton
                android:id="@+id/ImageButton1_4"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton2_4"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton3_4"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton4_4"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton5_4"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <ImageButton
                android:id="@+id/ImageButton1_3"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton2_3"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton3_3"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton4_3"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton5_3"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:gravity="center">

            <ImageButton
                android:id="@+id/ImageButton1_2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton2_2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />

            <ImageButton
                android:id="@+id/ImageButton3_2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton4_2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading" 
                android:onClick="evaluateButton"/>

            <ImageButton
                android:id="@+id/ImageButton5_2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/loading"
                android:onClick="evaluateButton" />
        </TableRow>

    </TableLayout>

</FrameLayout>

游戏中的 Activity

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.moconnell.thehacker.InGame"
    tools:ignore="MergeRootFrame" />

最佳答案

您在附加具有 View 资源fragment_ingame的 fragment 之前调用generateImages()函数。因此,在generateImages()中,没有ID为R.id.ImageButton1_6的ImageButton可用。

关于java - 空指针搜索 findViewById android 应用程序 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066525/

相关文章:

android - 使用 ndk 构建工具构建 opencv 时出现此错误

Java:在MySQL中高效存储Protobuf对象

java - Wildfly - 失败登录异常 : Password Incorrect/Password Required Exception

java - 如何防止从服务器端上传大文件

Java FX 如果选择了复选框,如何启用组合框?

android - "context"到底是什么意思?对于 soundPool.load int load(Context context, int resId, int priority)

android - 项目级或全局 build.gradle 中的通用 gradle 配置

eclipse - 不需要Git同步

java - 将 SQLite 安装到 Eclipse 中以与 Java 一起使用

java - 在静态 block Eclipse-java 中断言