Java 改进API数据传入片段
日志:Java 改进API数据传入片段,java,android,android-fragments,nullpointerexception,retrofit2,Java,Android,Android Fragments,Nullpointerexception,Retrofit2,日志: public class FragmentCurrent extends Fragment { private TextView tempTV,areaTV,countryTV,sunriseTV,sunsetTV,humidityTV,conditionTV; public FragmentCurrent() { // Required empty public constructor } @Override public
public class FragmentCurrent extends Fragment {
private TextView tempTV,areaTV,countryTV,sunriseTV,sunsetTV,humidityTV,conditionTV;
public FragmentCurrent() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
String temperature = getArguments().getString("temperature");
String areaName = getArguments().getString("areaName");
String country = getArguments().getString("country");
String sunrise = getArguments().getString("sunrise");
String sunset = getArguments().getString("sunset");
String humidity = getArguments().getString("humidity");
String weatherCondition = getArguments().getString("condition");
tempTV = (TextView) getView().findViewById(R.id.showTemperature);
sunriseTV = (TextView) getView().findViewById(R.id.showSunrise);
sunsetTV = (TextView) getView().findViewById(R.id.showSunset);
conditionTV = (TextView) getView().findViewById(R.id.showCondition);
tempTV.setText(temperature);
sunriseTV.setText(sunrise);
sunsetTV.setText(sunset);
conditionTV.setText(weatherCondition);
View view = inflater.inflate(R.layout.fragment_fragment_currrent, container, false);
return view;
}
}
我无法以片段形式传递数据。它给出了NullPointerException,这意味着数据不会被分割。请,有人,帮助我如何在片段中传递改装API数据,或者有人能告诉我如何以简单的方式在片段中传递改装数据吗?您的问题在于您在片段中使用视图的方式,在onCreateView的末尾,您正在实例化一个视图对象,而不是使用getView,使用视图对象本身查找布局中的视图
04-22 00:05:46.234 2684-2684/? E/libprocessgroup: failed to make and chown /acct/uid_10071: Read-only file system
04-22 00:05:48.331 2684-2684/com.example.forever.weather E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.forever.weather, PID: 2684
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.forever.weather/com.example.forever.weather.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.example.forever.weather.FragmentCurrent.onCreateView**(FragmentCurrent.java:37)**
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
at com.example.forever.weather.MainActivity.onStart**(MainActivity.java:161)**
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
那句话应该是先说的,然后再举例说
View view = inflater.inflate(R.layout.fragment_fragment_currrent, container, false);
问题在于您在片段中使用视图的方式,在onCreateView的末尾,您正在实例化一个视图对象,而不是使用getView,而是使用视图对象本身来查找布局中的视图
04-22 00:05:46.234 2684-2684/? E/libprocessgroup: failed to make and chown /acct/uid_10071: Read-only file system
04-22 00:05:48.331 2684-2684/com.example.forever.weather E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.forever.weather, PID: 2684
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.forever.weather/com.example.forever.weather.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.example.forever.weather.FragmentCurrent.onCreateView**(FragmentCurrent.java:37)**
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
at com.example.forever.weather.MainActivity.onStart**(MainActivity.java:161)**
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
那句话应该是先说的,然后再举例说
View view = inflater.inflate(R.layout.fragment_fragment_currrent, container, false);
您正在调用
getView()
,还没来得及获取视图
试试这个
tempTV = (TextView) view.findViewById(R.id.showTemperature);
sunriseTV = (TextView) view.findViewById(R.id.showSunrise);
sunsetTV = (TextView) view.findViewById(R.id.showSunset);
conditionTV = (TextView)view.findViewById(R.id.showCondition);
您还需要在
public void onResponse(
)中创建并添加片段,否则,您的数据将作为未分配和空值传递(因为您的请求尚未完成)您在获得视图之前正在调用getView()
试试这个
tempTV = (TextView) view.findViewById(R.id.showTemperature);
sunriseTV = (TextView) view.findViewById(R.id.showSunrise);
sunsetTV = (TextView) view.findViewById(R.id.showSunset);
conditionTV = (TextView)view.findViewById(R.id.showCondition);
您还需要在
public void onResponse(
)中创建并添加您的片段,否则,您的数据将以未分配和null的形式传递(因为您的请求尚未完成)您是否尝试了数据库或共享首选项?您是否尝试了事件总线或可观察项?实际上我不知道“事件总线或可观察项”您必须意识到回调是异步调用的,这意味着在您从callShare stacktrace接收结果之前,会将您的参数设置为片段,nullpointer也可能是由其他原因引起的。您是否尝试了数据库或共享首选项?您是否尝试了事件总线或Observables?实际上,我没有了解“事件总线或可观察对象”您必须意识到回调是异步调用的,这意味着在您从callShare stacktrace接收结果之前,会将参数设置为片段。nullpointer也可能是由其他原因引起的。请删除所有getView并使用view,但请确保将视图放在顶部。主要原因是t他的onCreateView为frament创建要获取的视图,但由于尚未创建该视图,因此您无法使用它。此生命周期方法中至少没有。请在此生命周期方法中使用它,onActivityCreated()onActivityCreated()在onCreateView()之后调用onActivityCreated()方法。此外,为了同步获取结果,您可以使用execute函数而不是enqueue函数进行改装,以立即获取响应。删除所有getView并使用view,但请确保将视图放置在顶部。主要原因是这一次CreateView为frament创建了要获取的视图,但由于尚未创建,您无法使用它。此生命周期方法中至少没有。请在此生命周期方法中使用它,onActivityCreated()onActivityCreated()在onCreateView()之后调用onActivityCreated()方法。此外,为了同步获取结果,您可以使用execute函数而不是enqueue函数进行改装,以立即返回响应。