-1

why my app crashes ll the time on startup? Im done

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 and Second_Fragment and 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;
}

}

It crashes every time on startup. I lost 2 hours of googling and chceking my code. Any solution? Im sorry if its noob mistake,I am beginner. Thank you!

Manifest

<?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 is here

antoninkriz
  • 966
  • 4
  • 18
  • 36
  • Please post your stacktrace. – Thomas R. Aug 19 '15 at 10:52
  • Do you find any exception in your logcat? – Jens Aug 19 '15 at 10:53
  • 1
    You don't need to search your code - if you look at [logcat](http://developer.android.com/tools/help/logcat.html), it will tell you where your code is failing. If you don't understand the output, post it here and someone will help you out. – adelphus Aug 19 '15 at 10:54
  • Added manifest code. – antoninkriz Aug 19 '15 at 12:04
  • @AntonínKříž Please post the stacktrace. I am getting downvotes for helping you. This is not acceptable. – Pranjal Sahu Aug 19 '15 at 12:12
  • @AntonínKříž please check how to get logcat. You can get logcat using the command adb shell logcat. – Pranjal Sahu Aug 19 '15 at 12:39
  • @sahu My phone is broken right now and I am running AMD (FX6300) CPU. I am trying to start it on "Genymotion", but VirtuaBox does not want to start virtual device after every restart of my PC. Tomorrow I can get old Intel laptop (Latitude D630). Thats why I still have not posted logcat logs. Im sorry. – antoninkriz Aug 19 '15 at 17:27

1 Answers1

-2

User has not posted any stackTrace, but from my own experience I can tell that he must be facing the Null Pointer Exception at

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

This is happening because getArguments is null. Question asker should attach the stackTrace as it would strengthen my claim. More experience person should look into it or should explain this behaviour.

Please change your code snippet From:

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

To

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

You can refer this link for more information: Android Fragment

IMPORTANT IMPORTANT Anyone who has downvoted this answer please check the above link or read the answer below.

I am posting my answer from that link

Adding to the answer of ρяσѕρєя K . While setting the argument one should maintain the sequence of execution of statements. For example in the answer sequence is:

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

But if you try to allocate Fragment first and then allocate an Bundle object and try to set it as argument to the allocated fragment, it might sometime be taken as null in onCreateView method inside the fragment. For example by using below code segment sometimes the getArguments inside onCreateView might return null.

Error prone code segment:

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

I was facing the same problem for quite some time but when I switched the order of statements my problem was solved. It would be great if someone could give a solid reason for this behaviour. Most probably it depends upon execution time. More experienced person should give reason behind it.

Community
  • 1
  • 1
Pranjal Sahu
  • 1,469
  • 3
  • 18
  • 27
  • What difference will it make?? @sahu – Emil Aug 19 '15 at 11:11
  • It is the same code, nothing is changed. – Hussein El Feky Aug 19 '15 at 11:12
  • Yes you might think it is same. But it is actually not. I have shared the link along with the code. Let him first check it then down vote. Please check the link for this behaviour. The behaviour is observed because before setting the argument in bundle for fragment the fragment gets initialize and it gets null as bundle. I have faced this error number of times – Pranjal Sahu Aug 19 '15 at 11:56
  • @Boss please check the update answer. – Pranjal Sahu Aug 19 '15 at 12:07
  • @HusseinElFeky please check the updated answer – Pranjal Sahu Aug 19 '15 at 12:07
  • @sahu I think OP hasn't written that code. Its automatically created for you when you select `NavigationDrawerActivity` from the new project wizard in eclipse. Also I think that the in that code the **sequence of execution of statements** doesn't make any difference. – Emil Aug 19 '15 at 12:15
  • @sahu Alright, that's better. I have removed my down vote. I think your answer should work. – Hussein El Feky Aug 19 '15 at 12:16
  • @Hussein El Feky Why did you think that?? If you explain, I'l also remove my down vote.. – Emil Aug 19 '15 at 12:18
  • @Boss I will try to explain it to. As I have said if you see Error prone code you are first creating a fragment then creating a bundle and then setting it as argument. What might happen in this case is before your Bundle is set the fragment might get attached and then in onAttach inside the fragment it will throw null POinter exception as at that time no bundle has been set yet. As I have already said it is error prone. It might work sometimes and sometimes not. This all depends upon the timing of onAttach function called inside the Fragment. – Pranjal Sahu Aug 19 '15 at 12:24
  • 1
    @Boss Test this code. No error appeared. I know that there should be no difference, but actually it worked. I know it seems kinda weird. – Hussein El Feky Aug 19 '15 at 12:26
  • Yes @HusseinElFeky that is the reason I am forcely backing up my claim. More experienced person should explain this behaviour. It has caused myself a lot of problems as well. – Pranjal Sahu Aug 19 '15 at 12:29
  • I have tried the code @sahu said to change. Both of them doesn't made any difference. (Also its automatically created for you by the eclipse IDE) – Emil Aug 19 '15 at 12:31
  • @sahu I am back with logcat! Thx man :) – antoninkriz Sep 09 '15 at 19:03