我正在创建一个在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()’所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)