Android - 启动时崩溃

时间:2015-08-19 10:51:08

标签: android android-layout android-fragments android-activity crash

为什么我的应用程序在启动时崩溃了?我完成了

Main_Activity

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;


public class MainActivity extends AppCompatActivity
    implements NavigationDrawerFragment.NavigationDrawerCallbacks {

/**
 * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
 */
private NavigationDrawerFragment mNavigationDrawerFragment;

/**
 * Used to store the last screen title. For use in {@link #restoreActionBar()}.
 */
private CharSequence mTitle;

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

    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));





    //SERVER1

    boolean reachable = false;

    try {
        reachable = InetAddress.getByName("www.google.com").isReachable(2000);
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        TextView view = (TextView) findViewById(R.id.textView2);
        view.setText("server down");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        TextView view = (TextView) findViewById(R.id.textView2);
        view.setText("server down");
    }

    if(reachable == true){
        TextView view = (TextView) findViewById(R.id.textView2);
        view.setText("server works");
    } else{

    }


    //SERVER2
    boolean reachable2 = false;


    try {
        reachable2 = InetAddress.getByName("www.wikipedia.com").isReachable(2000);
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        TextView view = (TextView) findViewById(R.id.textView3);
        view.setText("server down");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        TextView view = (TextView) findViewById(R.id.textView3);
        view.setText("server down");
    }

    if(reachable2 == true){
        TextView view = (TextView) findViewById(R.id.textView3);
        view.setText("server works");
    } else{

    }


}

@Override
public void onNavigationDrawerItemSelected(int position) {

    Fragment myFragment = null;

    switch (position) {

        case 0:
            myFragment = new First_Fragment();
            break;

        case 1:
            myFragment = new Second_Fragment();
            break;

        case 2:
            myFragment = new Third_Fragment();
            break;
    }
    // update the main content by replacing fragments
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, myFragment)
            .commit();
}

public void onSectionAttached(int number) {
    switch (number) {
        case 1:
            mTitle = getString(R.string.title_section1);
            break;
        case 2:
            mTitle = getString(R.string.title_section2);
            break;
        case 3:
            mTitle = getString(R.string.title_section3);
            break;
    }
}

public void restoreActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setTitle(mTitle);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise, let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.main, menu);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

@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();

    //noinspection SimplifiableIfStatement
    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 {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return 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;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(
                getArguments().getInt(ARG_SECTION_NUMBER));
    }
}

}

first_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/textView2"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="107dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/textView3"
    android:layout_centerVertical="true"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignStart="@+id/textView2" />

</RelativeLayout>

First_Fragment和Second_Fragment以及Third_Fragment

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 First_Fragment extends Fragment {

View myView;

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

}

每次启动时都会崩溃。我丢失了2个小时的谷歌搜索和chceking我的代码。有解决方案吗我很抱歉,如果它的noob错误,我是初学者。谢谢!

清单

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

    <application
        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>

    </application>

</manifest>

logcat的

http://pastebin.com/f1vwCTST - logcat就在这里

1 个答案:

答案 0 :(得分:-2)

用户没有发布任何stackTrace,但根据我自己的经验,我可以说他必须面对空指针异常

((MainActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));

这是因为getArguments为null。问题提问者应该附上stackTrace,因为它会加强我的主张。更多经验的人应该研究它或者应该解释这种行为。

请更改您的代码段来自:

public static PlaceholderFragment newInstance(int sectionNumber) {
    PlaceholderFragment fragment = new PlaceholderFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}

public static PlaceholderFragment newInstance(int sectionNumber) {

    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    PlaceholderFragment fragment = new PlaceholderFragment();
    fragment.setArguments(args);
    return fragment;
}

您可以参考此链接以获取更多信息: Android Fragment

重要事项重要信息任何对此答案进行评分的人请查看以上链接或阅读以下答案

我是从该链接发布我的答案

添加ρяσѕρєяK的答案。设置参数时,应该保持语句的执行顺序。例如,在答案序列中是:

Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

但是如果你首先尝试分配Fragment然后分配一个Bundle对象并尝试将其设置为已分配片段的参数,则有时可能会在片段内的onCreateView方法中将其视为null。例如,通过使用下面的代码段,有时onCreateView中的getArguments可能会返回null。

容易出错的代码段:

Fragmentclass fragobj = new Fragmentclass();
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
fragobj.setArguments(bundle);

我在很长一段时间内遇到了同样的问题但是当我改变语句的顺序时,问题就解决了。如果有人能为这种行为提供坚实的理由,那就太好了。 最有可能取决于执行时间。更有经验的人应该给出理由。