setAdapter()上的NullPointer异常

时间:2015-06-17 06:30:58

标签: java android xml nullpointerexception

这是我的第一个Android应用程序,我想要做的就是创建一个包含一些示例数据的列表。我得到了#34;不幸的是,阳光已经停止了#34;我跑的时候手机上出错了。

如果我删除这行代码,应用程序就会运行 -

lstview.setAdapter(mForecastAdapter);

此外,当我删除这行代码并运行应用程序时,我会获得所有年份的日历,但我没有在我的代码中的任何地方使用日历!知道为什么会这样吗?

这是我的MainActivity.java -

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();

        }
    }


    @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_main, menu);
        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.
        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 {

        private ArrayAdapter<String> mForecastAdapter;

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            String[] forecastArray;
            forecastArray = new String[]{
                    "Today - Sunny 88/63",
                    "Tomorrow - Foggy - 70/40",
                    "Thursday",
                    "Friday",
                    "Saturday",
                    "Sunday"
            };

            List<String> weekForecast = new ArrayList<String>(Arrays.asList(forecastArray));

            mForecastAdapter = new
                    ArrayAdapter<String>(
                    getActivity(),
                    R.layout.list_item_forecast,
                    R.id.list_item_forecast_textview,
                    weekForecast);
            ListView lstview = (ListView) rootView.findViewById(R.id.listview_forecast);
            lstview.setAdapter(mForecastAdapter);

            return rootView;

        }
    }
}

list_item_forecast.xml -

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:id="@+id/list_item_forecast_textview"
    >

</TextView>

fragment_main.xml -

<FrameLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity$PlaceholderFragment">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview_forecast"></ListView>

</FrameLayout>

AndroidManifest.xml -

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

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

这是一个非常简单的程序,我到处寻找并且没有一个解决方案似乎有效。所以 -

  1. 当我删除这行代码时,为什么我的应用程序会获得无限日历?

    lstview.setAdapter(mForecastAdapter);

  2. 为什么应用程序不能与该行一起运行?

  3. BTW这里是logcat -

    06-17 11:34:32.121  32380-32380/com.example.prashanth.sunshine I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@1689948 time:428069386
    06-17 11:36:28.478      641-641/com.example.prashanth.sunshine D/AndroidRuntime﹕ Shutting down VM
    06-17 11:36:28.479      641-641/com.example.prashanth.sunshine E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.example.prashanth.sunshine, PID: 641
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prashanth.sunshine/com.example.prashanth.sunshine.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2354)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at com.example.prashanth.sunshine.MainActivity$PlaceholderFragment.onCreateView(MainActivity.java:90)
                at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
                at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
                at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
                at android.app.Activity.performStart(Activity.java:6062)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
    06-17 11:42:14.846    1437-1437/com.example.prashanth.sunshine I/art﹕ Late-enabling -Xcheck:jni
    06-17 11:42:15.308    1437-1437/com.example.prashanth.sunshine D/AndroidRuntime﹕ Shutting down VM
    06-17 11:42:15.312    1437-1437/com.example.prashanth.sunshine E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.example.prashanth.sunshine, PID: 1437
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prashanth.sunshine/com.example.prashanth.sunshine.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2354)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at com.example.prashanth.sunshine.MainActivity$PlaceholderFragment.onCreateView(MainActivity.java:91)
                at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
                at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
                at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
                at android.app.Activity.performStart(Activity.java:6062)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
    06-17 11:51:54.224    2292-2292/com.example.prashanth.sunshine D/AndroidRuntime﹕ Shutting down VM
    06-17 11:51:54.225    2292-2292/com.example.prashanth.sunshine E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.example.prashanth.sunshine, PID: 2292
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prashanth.sunshine/com.example.prashanth.sunshine.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2354)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at com.example.prashanth.sunshine.MainActivity$PlaceholderFragment.onCreateView(MainActivity.java:91)
                at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
                at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
                at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
                at android.app.Activity.performStart(Activity.java:6062)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
                at android.app.ActivityThread.access$900(ActivityThread.java:153)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5291)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
    06-17 11:51:56.581    2292-2292/com.example.prashanth.sunshine I/Process﹕ Sending signal. PID: 2292 SIG: 9
    

    编辑:Activity_main.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container"
        android:layout_width="match_parent" android:layout_height="match_parent"
        tools:context=".MainActivity" tools:ignore="MergeRootFrame" />
    

    提前致谢!

1 个答案:

答案 0 :(得分:0)

我更改了代码的某些部分,似乎正在运行。我认为这是错误导入AppCompat库的问题。以下是整个MainActivity代码。

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                            .commit();

        }
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        private ArrayAdapter<String> mForecastAdapter;

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            String[] forecastArray;
            forecastArray = new String[]{
                    "Today - Sunny 88/63",
                    "Tomorrow - Foggy - 70/40",
                    "Day After - Life",
                    "Kidney",
                    "Saturday",
                    "Sunday"
            };

            List<String> weekForecast = new ArrayList<String>(Arrays.asList(forecastArray));

            mForecastAdapter = new
                    ArrayAdapter<String>(
                    getActivity(),
                    R.layout.list_item_forecast,
                    weekForecast);
            ListView lstview = (ListView) rootView.findViewById(R.id.listview_forecast);
            lstview.setAdapter(mForecastAdapter);

            return rootView;

        }
    }
}

这是您正在寻找的输出

enter image description here