2017-06-13 128 views
-3

我已經成功構建這個應用程序,但應用程序不斷崩潰在我的模擬器/手機。它見過這樣的不能看我的MainActivity不幸的是,[app]已經停止

MainActivity.java

package com.example.remotelab; 

    private NavigationDrawerFragment mNavigationDrawerFragment; 

    private CharSequence mTitle; 
    public static Socket clientSocket = null; 
    public static ObjectInputStream objectInputStream = null; 
    public static ObjectOutputStream objectOutputStream = null; 
    private static ActionBarActivity thisActivity; 
    private boolean doubleBackToExitPressedOnce = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     thisActivity = this; 
     mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      //checkForPermission(); 
     } 
    } 

    @Override 
    public void onNavigationDrawerItemSelected(int position) { 
     // update the main content by replacing fragments 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager 
       .beginTransaction() 
       .replace(R.id.container, 
         returnAppropriateFragment(position + 1)).commit(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     if (!mNavigationDrawerFragment.isDrawerOpen()) { 
      getMenuInflater().inflate(R.menu.main, menu); 
      restoreActionBar(); 
      return true; 
     } 
     return super.onCreateOptionsMenu(menu); 
    } 
} 

my app crash and send me this bug report on my phone

main_activity.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.remotelab.MainActivity" > 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <fragment 
     android:id="@+id/navigation_drawer" 
     android:name="com.example.remotecontrolpc.NavigationDrawerFragment" 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     tools:layout="@layout/fragment_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

NavigationDrawerFragnent.java

package com.example.remotelab; 

import android.support.v7.app.ActionBarActivity; 
import android.app.Activity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.content.SharedPreferences; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 


public class NavigationDrawerFragment extends Fragment { 


    private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; 
    private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; 
    private NavigationDrawerCallbacks mCallbacks; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerListView; 
    private View mFragmentContainerView; 
    private int mCurrentSelectedPosition = 0; 
    private boolean mFromSavedInstanceState; 
    private boolean mUserLearnedDrawer; 

    public NavigationDrawerFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     SharedPreferences sp = PreferenceManager 
       .getDefaultSharedPreferences(getActivity()); 
     mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); 

     if (savedInstanceState != null) { 
      mCurrentSelectedPosition = savedInstanceState 
        .getInt(STATE_SELECTED_POSITION); 
      mFromSavedInstanceState = true; 
     } 

     selectItem(mCurrentSelectedPosition); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     mDrawerListView = (ListView) inflater.inflate(
       R.layout.fragment_navigation_drawer, container, false); 
     mDrawerListView 
       .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
         selectItem(position); 
        } 
       }); 
     NavigationDrawerItem navigationDrawerItems[] = new NavigationDrawerItem[] { 
       new NavigationDrawerItem(R.drawable.connect, getString(R.string.connect)), 
       new NavigationDrawerItem(R.drawable.touchpad, getString(R.string.touchpad)), 
       new NavigationDrawerItem(R.drawable.keyboard, getString(R.string.keyboard)), 
       new NavigationDrawerItem(R.drawable.file_transfer, getString(R.string.file_transfer)), 
       new NavigationDrawerItem(R.drawable.presentation, getString(R.string.presentation)), 
       new NavigationDrawerItem(R.drawable.power_off, getString(R.string.power_off)) 
     }; 
     mDrawerListView.setAdapter(new NavigationDrawerItemAdapter(getActionBar().getThemedContext(), 
       R.layout.listview_item_navigation_drawer, navigationDrawerItems)); 
     mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
     return mDrawerListView; 
    } 

    public boolean isDrawerOpen() { 
     return mDrawerLayout != null 
       && mDrawerLayout.isDrawerOpen(mFragmentContainerView); 
    } 

    public void setUp(int fragmentId, DrawerLayout drawerLayout) { 
     mFragmentContainerView = getActivity().findViewById(fragmentId); 
     mDrawerLayout = drawerLayout; 

     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
       GravityCompat.START); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(getActivity(), 
     mDrawerLayout, 
     R.drawable.ic_drawer, 
     R.string.navigation_drawer_open, 
     R.string.navigation_drawer_close 
     ) { 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       if (!isAdded()) { 
        return; 
       } 

       getActivity().supportInvalidateOptionsMenu(); 

      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       if (!isAdded()) { 
        return; 
       } 

       if (!mUserLearnedDrawer) { 
        mUserLearnedDrawer = true; 
        SharedPreferences sp = PreferenceManager 
          .getDefaultSharedPreferences(getActivity()); 
        sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true) 
          .apply(); 
       } 

       getActivity().supportInvalidateOptionsMenu(); 
      } 
     }; 

     if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
      mDrawerLayout.openDrawer(mFragmentContainerView); 
     } 

     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 

    private void selectItem(int position) { 
     mCurrentSelectedPosition = position; 
     if (mDrawerListView != null) { 
      mDrawerListView.setItemChecked(position, true); 
     } 
     if (mDrawerLayout != null) { 
      mDrawerLayout.closeDrawer(mFragmentContainerView); 
     } 
     if (mCallbacks != null) { 
      mCallbacks.onNavigationDrawerItemSelected(position); 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mCallbacks = (NavigationDrawerCallbacks) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(
        "Activity must implement NavigationDrawerCallbacks."); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mCallbacks = null; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig);. 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

     if (mDrawerLayout != null && isDrawerOpen()) { 
      inflater.inflate(R.menu.global, menu); 
      showGlobalContextActionBar(); 
     } 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void showGlobalContextActionBar() { 
     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setTitle(R.string.app_name); 
    } 

    private ActionBar getActionBar() { 
     return ((ActionBarActivity) getActivity()).getSupportActionBar(); 
    } 

    public static interface NavigationDrawerCallbacks { 
     void onNavigationDrawerItemSelected(int position); 
    } 
} 
+0

公共類MainActivity擴展ActionBarActivity實現 \t \t NavigationDrawerFragment.NavigationDrawerCallbacks {} – sidster

+0

把你activity_main.xml中的文件。 – Abhishek

+0

第31行的activity_main.xml中有一些錯誤。 您是否也可以發佈您的xml。 –

回答

0

得到了錯誤

你必須刪除所有不需要的代碼從Android的默認片斷創建的。 採用NavigationDrawerFragment文件的備份並將NavigationDrawerFragment替換爲您的NavigationDrawerFragment文件。

import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class NavigationDrawerFragment extends Fragment { 

private Context mContext; 



@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup  container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 

    mContext = view.getContext(); 

    initialiseView(view); 

    return view; 
} 

private void initialiseView(View view) { 

    //DO ANY INSTANCE VARIABLE INITIALISATION 


} 
} 
相關問題