2013-12-20 3 views
0

Когда я запускаю свое приложение, я продолжаю получать исключение NullPointerException в строке 56, как показано в журнале отладки ниже. Я относительно новичок в программировании приложений для Android, поэтому я не могу понять, что здесь происходит. Может кто-то, пожалуйста, помогите мне с этим? Мой MainActivity.java:java.lang.NullPointerException в MainAcitivity setOnClickListener

package com.termite.pockettube; 

import java.util.Locale; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.NavUtils; 
import android.support.v4.view.ViewPager; 
import android.view.Gravity; 
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.TextView; 

public class MainActivity extends FragmentActivity implements View.OnClickListener{ 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which 
    * will keep every loaded fragment in memory. If this becomes too memory 
    * intensive, it may be best to switch to a 
    * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
    */ 
    SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    ViewPager mViewPager; 

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

     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the app. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(
       getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(this); //this is line 56 
    } 
    public void countryOnClick() { 
     startActivity(new Intent("com.termite.pockettube.COUNTRY")); 
    } 
    @Override 
public void onClick(View v) { 
    switch (v.getId()){ 
    case R.id.button: 
     countryOnClick(); 
     break; 
    } 
} 
    @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; 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a DummySectionFragment (defined as a static inner class 
      // below) with the page number as its lone argument. 
      switch (position) { 
      case 0: 
       Fragment1 fragment1 = new Fragment1(); 
       return fragment1; 
      case 1: 
       Fragment2 fragment2 = new Fragment2(); 
       return fragment2; 
      case 2: 
       Fragment3 fragment3 = new Fragment3(); 
       return fragment3; 
      case 3: 
       Fragment4 fragment4 = new Fragment4(); 
       return fragment4; 
      case 4: 
       Fragment5 fragment5 = new Fragment5(); 
       return fragment5; 
      } 
      return null; 
     } 

     @Override 
     public int getCount() { 
      // Show 5 total pages. 
      return 5; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(l); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(l); 
      case 3: 
       return getString(R.string.title_section4).toUpperCase(l); 
      case 4: 
       return getString(R.string.title_section5).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

} 

Это мой отладки журнала при попытке запуска приложения:

12-20 01:13:26.898: D/AndroidRuntime(6539): Shutting down VM 
12-20 01:13:26.906: W/dalvikvm(6539): threadid=1: thread exiting with uncaught exception (group=0x40af21f8) 
12-20 01:13:26.906: E/AndroidRuntime(6539): FATAL EXCEPTION: main 
12-20 01:13:26.906: E/AndroidRuntime(6539): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.termite.pockettube/com.termite.pockettube.MainActivity}: java.lang.NullPointerException 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2060) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1181) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.os.Looper.loop(Looper.java:137) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread.main(ActivityThread.java:4558) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at dalvik.system.NativeStart.main(Native Method) 
12-20 01:13:26.906: E/AndroidRuntime(6539): Caused by: java.lang.NullPointerException 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at com.termite.pockettube.MainActivity.onCreate(MainActivity.java:56) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.Activity.performCreate(Activity.java:4635) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1999) 
12-20 01:13:26.906: E/AndroidRuntime(6539):  ... 11 more 

Manifest код XML:

<uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="19" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.termite.pockettube.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.termite.pockettube.CountryActivity" 
      android:label="@string/title_activity_country" > 
      <intent-filter> 
       <action android:name="com.termite.pockettube.COUNTRY" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

activity_main.xml:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_title_strip" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="top" 
     android:background="#33b5e5" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" 
     android:textColor="#fff" 
     > 

    </android.support.v4.view.PagerTabStrip> 



</android.support.v4.view.ViewPager> 

fragment1.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity$DummySectionFragment" > 

    <Button 
     android:id="@+id/button" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_alignParentTop="true" 
     android:text="@string/button" /> 

</RelativeLayout> 
+1

что линия 56 MainActivity.java? – Raghunandan

+0

Я думаю, что кнопка находится внутри фрагмента, поэтому настройте прослушиватель кликов внутри адаптера. Вы не можете получить его здесь –

+0

может быть кнопка проблема –

ответ

1

Спасибо всем за вход, и все это работало до конца NPE, пока он не сделал выполняйте задачу, которую я хотел выполнить. Я добавил кнопку в файл y Fragment1.java и затем сработал.

package com.termite.pockettube; 

import com.termite.pockettube.MainActivity.SectionsPagerAdapter; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class Fragment1 extends Fragment implements View.OnClickListener { 
Button button; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Get the view from fragmenttab1.xml 
     View view = inflater.inflate(R.layout.fragment1, container, false); 
     button = (Button)view.findViewById(R.id.button); 
     button.setOnClickListener(this); 
     return view; 
    } 
    /* @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


    }*/ 
    public void countryOnClick() { 
     startActivity(new Intent("com.termite.pockettube.COUNTRY")); 
    } 
    @Override 
public void onClick(View v) { 
    switch (v.getId()){ 
    case R.id.button: 
     countryOnClick(); 
     break; 
    } 
} 
} 
1

Проверить R.id.button, кнопка его R.layout.activity_main макете ..

Разместите activity_main.xml макет.

Do under thing.

Добавить кнопку в activity_main.xml или изменения кода

button = (Button) mViewPager.findViewById(R.id.button); 
button.setOnClickListener(this); 
+0

Это дает «NullPointerException»? – Raghunandan

+0

@ Raghunandan может быть. –

+3

это не вызвало NPE – Raghunandan

1
button = (Button) findViewById(R.id.button); 
button.setOnClickListener(this); //this is line 56 

кнопка является недействительным. Инициализация не удается

кнопку Нужна в activity_main.xml, а также идентификатор кнопки должен быть

findViewById выглядит для представления с идентификатором в текущем надутом макете. Так что если у вас есть кнопка в activity_main.xml, то ваша инициализация работает еще, вы получаете NPE`

Нет кнопки в activity_main.xml. S0 button = (Button) findViewById(R.id.button); не работает

Кнопка находится в фрагменте1. Поэтому вам нужно раздуть макет , а затем инициализировать кнопку в onCreateView не инициализировать кнопку в действии.

2

Вам необходимо нажать кнопку activity_main.xml, поскольку вы добавили, что кнопка в fragment_1.xml является причиной NPE.

добавить button в activity_main.xml решит вашу проблему

** activity_main.XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/padding_Small" 
    android:shrinkColumns="*" 
    android:stretchColumns="*" > 

    <android.support.v4.view.ViewPager 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".MainActivity" > 

     <android.support.v4.view.PagerTabStrip 
      android:id="@+id/pager_title_strip" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_gravity="top" 
      android:background="#33b5e5" 
      android:paddingBottom="4dp" 
      android:paddingTop="4dp" 
      android:textColor="#fff" /> 
    </android.support.v4.view.ViewPager> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="ButtonText" /> 

</RelativeLayout> 
0

Попробуйте

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

в OnCreate

Тогда попробуйте

private OnClickListener buttonListener = new OnClickListener() { 
    public void onClick(View v) { 
     //Do Work Here 
    } 
}; 
0

Ваша ошибка в методе GetItem (poistion). даже ваш размер адаптера равен 5, он дает вам больше тернов, чем 5. в такие моменты вы возвращаете нуль оттуда.

вы можете проверить это, добавив заявление журнала для печати значения позиции в начале метода GetItem

-1
Button button=(Button)findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { Toast.makeText(MainActivity.this,"RunAPP",Toast.LENGTH_LONG).show(); 
     } 
    }); 
+1

Не могли бы вы немного объяснить свое решение !? –

+0

nullpointerexception произошло, когда objcect является Null, я думаю, что вы должны в первую очередь, определили свой объект, а затем примените его методы, вы можете протестировать этот путь, я надеюсь, что так вам поможет. – saeid

+1

Добро пожаловать @saeid, этот ответ как ничто иное, как другие перед вами. В чем разница в вашем ответе? – AxelH

Смежные вопросы