Android应用程序 – 尝试在空对象引用上调用接口方法’int java.util.List.size()’

Android应用程序 – 尝试在空对象引用上调用接口方法’int java.util.List.size()’,第1张

概述我正在创建一个在gridview中显示电影海报的应用程序.我正在使用他们来自themoviedb.org的API.问题是当我运行我的应用程序时我遇到了跟​​随错误,我正在努力解决它:07-1820:27:39.2442751-2751/?E/AndroidRuntime﹕FATALEXCEPTION:mainProcess:com.projmobileapp.pm

我正在创建一个在grIDvIEw中显示电影海报的应用程序.我正在使用他们来自themovIEdb.org的API.问题是当我运行我的应用程序时我遇到了跟​​随错误,我正在努力解决它:

07-18 20:27:39.244    2751-2751/? E/AndroIDRuntime﹕ FATAL EXCEPTION: main    Process: com.projmobileapp.pmdbadd.pmdb, PID: 2751    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projmobileapp.pmdbadd.pmdb/com.projmobileapp.pmdbadd.pmdb.MainActivity}: androID.vIEw.InflateException: Binary XML file line #1: Error inflating class fragment            at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2693)            at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)            at androID.app.ActivityThread.access0(ActivityThread.java:177)            at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)            at androID.os.Handler.dispatchMessage(Handler.java:102)            at androID.os.Looper.loop(Looper.java:145)            at androID.app.ActivityThread.main(ActivityThread.java:5942)            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:1400)            at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1195)     Caused by: androID.vIEw.InflateException: Binary XML file line #1: Error inflating class fragment            at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:770)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:483)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:415)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:366)            at androID.support.v7.app.AppCompatDelegateImplV7.setContentVIEw(AppCompatDelegateImplV7.java:249)            at androID.support.v7.app.AppCompatActivity.setContentVIEw(AppCompatActivity.java:106)            at com.projmobileapp.pmdbadd.pmdb.MainActivity.onCreate(MainActivity.java:15)            at androID.app.Activity.performCreate(Activity.java:6289)            at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)            at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2646)            at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)            at androID.app.ActivityThread.access0(ActivityThread.java:177)            at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)            at androID.os.Handler.dispatchMessage(Handler.java:102)            at androID.os.Looper.loop(Looper.java:145)            at androID.app.ActivityThread.main(ActivityThread.java:5942)            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:1400)            at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1195)     Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference            at androID.Widget.ArrayAdapter.getCount(ArrayAdapter.java:330)            at androID.Widget.GrIDVIEw.setAdapter(GrIDVIEw.java:201)            at com.projmobileapp.pmdbadd.pmdb.MainActivityFragment.onCreateVIEw(MainActivityFragment.java:53)            at androID.support.v4.app.Fragment.performCreateVIEw(Fragment.java:1789)            at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:924)            at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1116)            at androID.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218)            at androID.support.v4.app.FragmentManagerImpl.onCreateVIEw(FragmentManager.java:2170)            at androID.support.v4.app.FragmentActivity.onCreateVIEw(FragmentActivity.java:300)            at androID.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateVIEw(AppCompatDelegateImplV7.java:838)            at androID.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateVIEw(AppCompatDelegateImplV11.java:34)            at androID.support.v7.app.AppCompatDelegateImplV7.onCreateVIEw(AppCompatDelegateImplV7.java:826)            at androID.support.v4.vIEw.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateVIEw(LayoutInflaterCompatHC.java:44)            at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:732)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:483)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:415)            at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:366)            at androID.support.v7.app.AppCompatDelegateImplV7.setContentVIEw(AppCompatDelegateImplV7.java:249)            at androID.support.v7.app.AppCompatActivity.setContentVIEw(AppCompatActivity.java:106)            at com.projmobileapp.pmdbadd.pmdb.MainActivity.onCreate(MainActivity.java:15)            at androID.app.Activity.performCreate(Activity.java:6289)            at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)            at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2646)            at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)            at androID.app.ActivityThread.access0(ActivityThread.java:177)            at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)            at androID.os.Handler.dispatchMessage(Handler.java:102)            at androID.os.Looper.loop(Looper.java:145)            at androID.app.ActivityThread.main(ActivityThread.java:5942)            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:1400)            at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1195)07-18 20:27:39.244    2702-2702/? W/ResourcesManager﹕ Asset path '/system/framework/twframework.jar' does not exist or contains no resources.

这是我的代码

package com.projmobileapp.pmdbadd.pmdb;import androID.os.AsyncTask;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.util.Log;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.GrIDVIEw;import org.Json.JsONArray;import org.Json.JsONException;import org.Json.JsONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStream;import java.io.inputStreamReader;import java.net.httpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivityFragment extends Fragment {    private ArrayList<MovIE> flavorList;    public MainActivityFragment() {    }    MovIEAdapter mMovIEAdapter;    public voID onSaveInstanceState(Bundle outState) {        outState.putParcelableArrayList("flavors", flavorList);        super.onSaveInstanceState(outState);    }    @OverrIDe    public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,                             Bundle savedInstanceState) {        VIEw rootVIEw = inflater.inflate(R.layout.fragment_main, container, false);        mMovIEAdapter = new MovIEAdapter(getActivity(), flavorList);        GrIDVIEw ListVIEw = (GrIDVIEw) rootVIEw.findVIEwByID(R.ID.grIDvIEw_movIE);        ListVIEw.setAdapter(mMovIEAdapter);        updateMovIE();    return rootVIEw;    }    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setHasOptionsMenu(true);    }    @OverrIDe    public voID onCreateOptionsMenu(Menu menu, MenuInflater inflater) {        // Inflate the menu; this adds items to the action bar if it is present.        inflater.inflate(R.menu.mainactivityfragment, menu);    }    @OverrIDe    public boolean onoptionsItemSelected(MenuItem item) {        int ID = item.getItemID();        if (ID == R.ID.action_refresh) {            updateMovIE();            return true;        }        return super.onoptionsItemSelected(item);    }    private voID updateMovIE() {        FetchMovIETask movIETask = new FetchMovIETask();        movIETask.execute();    }    class FetchMovIETask extends AsyncTask<VoID, VoID, List<MovIE>> {        private final String LOG_TAG = FetchMovIETask.class.getSimplename();        @OverrIDe        protected List<MovIE> doInBackground(VoID... params) {            httpURLConnection urlConnection = null;            BufferedReader reader = null;            // Will contain the raw JsON response as a string.            String movIEJsonStr = null;            try {                URL url = new URL("http://API.themovIEdb.org/3/discover/movIE?sort_by=popularity.desc&API_key=InsertAPIKey");                urlConnection = (httpURLConnection) url.openConnection();                urlConnection.setRequestMethod("GET");                urlConnection.connect();                // Read the input stream into a String                inputStream inputStream = urlConnection.getinputStream();                StringBuffer buffer = new StringBuffer();                if (inputStream == null) {                    // nothing to do.                    return null;                }                reader = new BufferedReader(new inputStreamReader(inputStream));                String line;                while ((line = reader.readline()) != null) {                    buffer.append(line + "\n");                }                if (buffer.length() == 0) {                    // Stream was empty.  No point in parsing.                    return null;                }                movIEJsonStr = buffer.toString();            } catch (IOException e) {                Log.e(LOG_TAG, "Error ", e);                return null;            } finally {                if (urlConnection != null) {                    urlConnection.disconnect();                }                if (reader != null) {                    try {                        reader.close();                    } catch (final IOException e) {                        Log.e(LOG_TAG, "Error closing stream", e);                    }                }            }            try {                return getMovIEDataFromJson(movIEJsonStr);            } catch (JsONException j) {                Log.e(LOG_TAG, "JsON Error", j);            }            return null;        }        private List<MovIE> getMovIEDataFromJson(String forecastJsonStr)                throws JsONException {            List<MovIE> movIEs = new ArrayList<>();            JsONObject movIEJson = new JsONObject(forecastJsonStr);            JsONArray movIEArray = movIEJson.getJsONArray("results");            for (int i = 0; i < movIEArray.length(); i++) {                JsONObject movIE = movIEArray.getJsONObject(i);                MovIE movIE1 = new MovIE(movIEJson.getString("original_Title"), movIEJson.getDouble("Vote_average"), movIEJson.getString("release_date"), movIEJson.getString("overvIEw"), movIEJson.getString("poster_path"));                movIEs.add(movIE1);            }            return movIEs;        }        @OverrIDe        protected voID onPostExecute(List<MovIE> movIEs) {            if (movIEs != null) {                mMovIEAdapter.clear();                for(MovIE dayForecastStr : movIEs) {                    mMovIEAdapter.add(dayForecastStr);                }                // New data is back from the server.  Hooray!            }        }    }}

请有人请指教

解决方法:

我相信你应该将列表保存到saveInstanceState的bundle中进行轮换,如果bundle不是null,你实际上并没有在onCreate或onCreateVIEw中读回它.此外,我甚至不确定MovIE是否实际上是一个可以使用的(使用http://parcelabler.com),但即使它是,但这不起作用,因为你需要使用writeTypedList和readTypedList而不是writeParcelableArrayList(它在读取时返回List< Parcelable> ,这不是你想要的).

但是目前的问题是你不应该在这一行给适配器一个null:

mMovIEAdapter = new MovIEAdapter(getActivity(), flavorList);

初始化适配器并仅在实际拥有数据时设置它,或者使用空列表初始化它.

实际上,使用writeTypedList和readTypedList,否则稍后在状态保存时会遇到很多问题.

总结

以上是内存溢出为你收集整理的Android应用程序 – 尝试在空对象引用上调用接口方法’int java.util.List.size()’全部内容,希望文章能够帮你解决Android应用程序 – 尝试在空对象引用上调用接口方法’int java.util.List.size()’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1096117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存