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函数进行改装,以立即返回响应。