2015-04-13 3 views
0

Я получаю NullPointerException, когда я пытаюсь получить доступ к моему ActionBarNullPointerException когда экранный ActionBar

getActionBar().setDisplayHomeAsUpEnabled(true); 

моему recipientsActivity это

package com.ahmetyuva.ribbit; 

import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.support.v4.app.NavUtils; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import com.parse.FindCallback; 
import com.parse.ParseException; 
import com.parse.ParseQuery; 
import com.parse.ParseRelation; 
import com.parse.ParseUser; 

import java.util.List; 


public class RecipientsActivity extends ListActivity{ 

    public static final String TAG = RecipientsActivity.class.getSimpleName(); 

    protected List<ParseUser> mFriends; 
    protected ParseRelation<ParseUser> mFriendsRelation; 
    protected ParseUser mCurrentUser; 

    protected MenuItem mSendMenuItem; 

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

     getActionBar().setDisplayHomeAsUpEnabled(true); 

     getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     mCurrentUser = ParseUser.getCurrentUser(); 
     mFriendsRelation = mCurrentUser.getRelation(ParseConstants.KEY_FRIENDS_RELATION); 

     ParseQuery<ParseUser> query = mFriendsRelation.getQuery(); 
     query.addAscendingOrder(ParseConstants.KEY_USERNAME); 
     query.findInBackground(new FindCallback<ParseUser>() { 
      @Override 
      public void done(List<ParseUser> friends, ParseException e) { 

       if(e == null) { 

        mFriends = friends; 

        String[] usernames = new String[mFriends.size()]; 
        int i = 0; 
        for (ParseUser user : mFriends) { 
         usernames[i] = user.getUsername(); 
         i++; 

        }     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
          getListView().getContext(), 
          android.R.layout.simple_list_item_checked, 
          usernames); 
        setListAdapter(adapter); 
       } 
       else{ 

        Log.e(TAG, e.getMessage()); 
        AlertDialog.Builder builder = new AlertDialog.Builder(RecipientsActivity.this); 
        builder.setMessage(e.getMessage()) 
          .setTitle(R.string.error_title) 
          .setPositiveButton(android.R.string.ok, null); 

        AlertDialog dialog = builder.create(); 
        dialog.show(); 

       } 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_recipients, menu); 
     mSendMenuItem = menu.getItem(0); 
     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. 
     switch (item.getItemId()){ 
      case android.R.id.home: 

       NavUtils.navigateUpFromSameTask(this); 
       return true; 
      case R.id.action_send: 
       return true; 
     } 
     /* int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 
*/ 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     if (l.getCheckedItemCount() > 0) { 
      mSendMenuItem.setVisible(true); 
     } else { 
      mSendMenuItem.setVisible(false); 
     } 
    } 
} 

мой журнал ошибки здесь

04-13 11:19:05.148 1956-1956/? E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ahmetyuva.ribbit/com.ahmetyuva.ribbit.RecipientsActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) at android.app.ActivityThread.access$600(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.ahmetyuva.ribbit.RecipientsActivity.onCreate(RecipientsActivity.java:40) at android.app.Activity.performCreate(Activity.java:5104) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)    at android.app.ActivityThread.access$600(ActivityThread.java:141)    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)    at android.os.Handler.dispatchMessage(Handler.java:99)    at android.os.Looper.loop(Looper.java:137)    at android.app.ActivityThread.main(ActivityThread.java:5041)    at java.lang.reflect.Method.invokeNative(Native Method)    at java.lang.reflect.Method.invoke(Method.java:511)    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)    at dalvik.system.NativeStart.main(Native Method) 

menu_recipients xml находится здесь

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     tools:context="com.ahmetyuva.ribbit.RecipientsActivity"> 
    <item android:id="@+id/action_send" 
      android:title="Send" 
      android:orderInCategory="100" 
      app:showAsAction="always" 
      android:visible="true" 
      android:icon="@drawable/ic_action_send_now" 
     /> 


</menu> 

activity_recipients 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" 
       tools:context="com.ahmetyuva.ribbit.RecipientsActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@android:id/list" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentTop="true"/> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/empty_recipients_list_message" 
     /> 

</RelativeLayout> 

манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ahmetyuva.ribbit" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="true" /> 

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <!-- 
     IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below 
     to match your app's package name + ".permission.C2D_MESSAGE". 
    --> 
    <permission 
     android:name="com.ahmetyuva.ribbit.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="com.ahmetyuva.ribbit.permission.C2D_MESSAGE" /> 

    <application 
     android:name=".RibbitApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".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=".LoginActivity" 
      android:label="@string/title_activity_login" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".SignUpActivity" 
      android:label="@string/title_activity_sign_up" 
      android:parentActivityName=".LoginActivity" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".EditFriendsActivity" 
      android:label="@string/title_activity_edit_friends" 
      android:parentActivityName=".MainActivity" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.ahmetyuva.ribbit.MainActivity" /> 
     </activity> 

     <service android:name="com.parse.PushService" /> 

     <receiver android:name="com.parse.ParseBroadcastReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.USER_PRESENT" /> 
      </intent-filter> 
     </receiver> 
     <receiver 
      android:name="com.parse.ParsePushBroadcastReceiver" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="com.parse.push.intent.RECEIVE" /> 
       <action android:name="com.parse.push.intent.DELETE" /> 
       <action android:name="com.parse.push.intent.OPEN" /> 
      </intent-filter> 
     </receiver> 
     <receiver 
      android:name="com.parse.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

<!--     IMPORTANT: Change "com.parse.starter" to match your app's package name. --> 
       <category android:name="com.ahmetyuva.ribbit" /> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name=".RecipientsActivity" 
      android:label="@string/title_activity_recipients" 
      android:parentActivityName=".MainActivity" 
      android:screenOrientation="portrait"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.ahmetyuva.ribbit.MainActivity" /> 
     </activity> 
    </application> 

</manifest> 
+0

Вы расширяете ListActivity. Вам необходимо расширить ActionBarActivity. – Carnal

+0

, но тогда мои свойства активности списка не работают, если я расширяю actionbaractivity. –

+0

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

ответ

0

Убедитесь, что вы на самом деле есть ActionBar, если, например, ваша тема: Theme.Light.NoActionBar, вы не будете иметь панель действий. Итак, убедитесь, что ваш theme имеет и Actionbar

EDIT:

Попробуйте следующую тему:

<style name="AppTheme" parent="Theme.AppCompat"> 

Если это не работает, Вы должны рассмотреть вопрос об изменении фрагментам, как это было предложено в это SO Answer

+0

У меня есть это

+0

Ok, Check my edit –

+0

Вам необходимо использовать тему Theme.AppCompat (или потомок) с этим действием. он дает эту ошибку, даже не загруженный –

0

Прежде всего, всегда делают это, чтобы избежать такого рода ошибки:

Затем, что находится в логарифме с тегом "test"?

+0

getSupportActionBar У меня нет этого метода. –

2

Попробуйте использовать

getSupportedActionBar() instead of getActionBar() 
+0

Я думаю, что это за исключением того, что getSupportActionBar() не getSupportedActionBar() :) – Maxouille

+0

Он является подклассом android.app.ListActivity, getSupportActionBar() действительно доступен? см. [ListActivity] (http://developer.android.com/reference/android/app/ListActivity.html) и его унаследованные классы. – Sanj

+0

getSupportActionBar() не доступен –

0

Для обоих видов деятельности,
в вашем OnCreate следующей строке после setContentView (...)
добавить следующее:

getActionBar().setDisplayHomeAsUpEnabled(true); 

в манифесте не включенные в другие группировки добавить

android:theme="@android:style/Theme.Holo.Light" 

в тегах непосредственно после

android:screenOrientation="portrait" 
Смежные вопросы