मैं रेट्रोफिट का उपयोग कर मौसम एपीआई से अपने खंड और गतिविधि वर्ग में डेटा प्रदर्शित करने की कोशिश कर रहा हूं लेकिन ऐप चलाने पर, यह कुछ भी प्रदर्शित नहीं करता है और इस बीच रनटाइम पर कोई त्रुटि नहीं दिखाता है। मुझे संदेह है कि यह मेरे रेट्रोफिट नेटवर्क सेटअप के गलत कनेक्शन के कारण होगा और मुझे कोई सुराग नहीं है कि गलती कहां है, मुझे मदद चाहिए, कृपया।

मैंने घोषणापत्र में इंटरनेट अनुमति जोड़ी है

मैंने अपने ब्राउज़र पर कुंजी को ऑनलाइन चलाने का भी प्रयास किया जैसे https://api.openweathermap.org/data/2.5/onecall?lat=9.0765&lon=7.3986&exclude=alert,hourly,दैनिक,मिनटली&appid= और यह काम करता है लेकिन प्रदर्शित नहीं होता है मेरे ऐप पर डेटा

मेरे कोड नीचे हैं:

FirstFragment.java

public class FirstFragment extends Fragment {
    public static String BaseUrl = "http://api.openweathermap.org/";
    public static String AppId = "(My App key)";
    public static String lat = "9.0574";
    public static String lon = "7.4898";
    // User current temperature, current condition, sunrise, sunset, temperature, pressure, humidity, wind_speed, visibility, UV Index
    TextView current_temp, current_output, rise_time, set_time, temp_out, Press_out, Humid_out, Ws_out, Visi_out, UV_out;
    // TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    public FirstFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment SecondFragment.
     */
// TODO: Rename and change types and number of parameters
    public static FirstFragment newInstance(String param1, String param2) {
        FirstFragment fragment = new FirstFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_first, container, false);
        current_temp = rootView.findViewById(R.id.textView10);
        current_output = rootView.findViewById(R.id.textView11);
        rise_time = rootView.findViewById(R.id.textView25);
        set_time = rootView.findViewById(R.id.textView26);
        temp_out = rootView.findViewById(R.id.textView28);
        Press_out = rootView.findViewById(R.id.textView29);
        Humid_out = rootView.findViewById(R.id.textView30);
        Ws_out = rootView.findViewById(R.id.textView33);
        Visi_out = rootView.findViewById(R.id.textView34);
        UV_out = rootView.findViewById(R.id.textView35);


                Retrofit retrofit = new Retrofit.Builder().baseUrl(BaseUrl).addConverterFactory(GsonConverterFactory.create()).build();
                WeatherService service = retrofit.create(WeatherService.class);
                Call<WeatherResponse> call = service.getCurrentWeatherData(lat, lon, AppId);
                call.enqueue(new Callback<WeatherResponse>() {
                    @Override
                    public void onResponse(@NonNull Call<WeatherResponse> call, @NonNull Response<WeatherResponse> response) {
                        if (response.code() == 200) {
                            WeatherResponse weatherResponse = response.body();
                            assert weatherResponse != null;

                            assert response.body() != null;
                            current_temp.setText(getString(R.string.blank, response.body().getCurrent().getTemp() + " ℃"));
                            current_output.setText(response.body().getCurrent().getWeather().get(0).getDescription());
                            rise_time.setText(getString(R.string.blank, response.body().getCurrent().getSunrise() + " AM"));
                            set_time.setText(getString(R.string.blank, response.body().getCurrent().getSunset() + " PM"));
                            temp_out.setText(getString(R.string.blank, response.body().getCurrent().getTemp() + " ℃"));
                            Press_out.setText(getString(R.string.blank, response.body().getCurrent().getPressure() + " hpa"));
                            Humid_out.setText(getString(R.string.blank, response.body().getCurrent().getHumidity() + " %"));
                            Ws_out.setText(getString(R.string.blank, response.body().getCurrent().getWindSpeed() + " Km/h"));
                            Visi_out.setText(getString(R.string.blank, response.body().getCurrent().getVisibility() + " m"));
                        }
                    }

                    @Override
                    public void onFailure(@NonNull Call<WeatherResponse> call, @NonNull Throwable t) {
                        t.printStackTrace();
                    }
                });
           return rootView;
            }


    }

होमएक्टिविटी.जावा

public class HomeActivity extends AppCompatActivity {
    public static String BaseUrl = "http://api.openweathermap.org/";
    public static String AppId = "(My App key)";
    public static String lat = "9.0574";
    public static String lon = "7.4898";
    // User Timezone name, current time
    TextView time_zone, time_field;
    ConstraintLayout constraintLayout;
    public static int count=0;
    int[] drawable =new int[]{R.drawable.dubai,R.drawable.central_bank_of_nigeria,R.drawable.eiffel_tower,R.drawable.hong_kong,R.drawable.statue_of_liberty};
    Timer _t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        time_zone = findViewById(R.id.textView9);
        time_field = findViewById(R.id.textView4);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
        NavController navController = Navigation.findNavController(this, R.id.fragment);
        NavigationUI.setupWithNavController(bottomNavigationView, navController);

        Retrofit retrofit = new Retrofit.Builder().baseUrl(BaseUrl).addConverterFactory(GsonConverterFactory.create()).build();
        WeatherService service = retrofit.create(WeatherService.class);
        Call<WeatherResponse> call = service.getCurrentWeatherData(lat, lon, AppId);
        call.enqueue(new Callback<WeatherResponse>() {

            @Override
            public void onResponse(@NonNull Call<WeatherResponse> call, @NonNull Response<WeatherResponse> response) {
                if (response.code() == 200) {
                    WeatherResponse weatherResponse = response.body();
                    assert weatherResponse != null;

                    assert response.body() != null;
                    time_zone.setText(response.body().getTimezone());
                    time_field.setText(response.body().getCurrent().getDt());

        constraintLayout = findViewById(R.id.layout);
        constraintLayout.setBackgroundResource(R.drawable.dubai);
        _t = new Timer();
        _t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // run on ui thread
                runOnUiThread(() -> {
                    if (count < drawable.length) {

                        constraintLayout.setBackgroundResource(drawable[count]);
                        count = (count + 1) % drawable.length;
                    }
                });
            }
        }, 5000, 5000);
    }
}

                @Override
                public void onFailure(@NotNull Call<WeatherResponse> call, @NotNull Throwable t) {

                }
            });
    }
}

मेरा इंटरफ़ेस

public interface WeatherService {
    @GET("data/2.5/weather?")
    Call<WeatherResponse> getCurrentWeatherData(@Query("lat") String lat, @Query("lon") String lon, @Query("APPID") String app_id);
}

संपादित करें

HTTP को https . में बदलने के बाद अब यह java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Integer com.tex.lightweatherforecast.first.Current.getDt()' on a null object reference रनटाइम पर दिखाता है

मेरी वर्तमान कक्षा:

public class Current {

    @SerializedName("dt")
    @Expose
    private Integer dt;
    @SerializedName("sunrise")
    @Expose
    private Integer sunrise;
    @SerializedName("sunset")
    @Expose
    private Integer sunset;
    @SerializedName("temp")
    @Expose
    private Double temp;
    @SerializedName("feels_like")
    @Expose
    private Double feelsLike;
    @SerializedName("pressure")
    @Expose
    private Integer pressure;
    @SerializedName("humidity")
    @Expose
    private Integer humidity;
    @SerializedName("dew_point")
    @Expose
    private Double dewPoint;
    @SerializedName("uvi")
    @Expose
    private Double uvi;
    @SerializedName("clouds")
    @Expose
    private Integer clouds;
    @SerializedName("visibility")
    @Expose
    private Integer visibility;
    @SerializedName("wind_speed")
    @Expose
    private Double windSpeed;
    @SerializedName("wind_deg")
    @Expose
    private Integer windDeg;
    @SerializedName("weather")
    @Expose
    private List<Weather> weather = null;

    public Integer getDt() {
        return dt;
    }

    public void setDt(Integer dt) {
        this.dt = dt;
    }

    public Integer getSunrise() {
        return sunrise;
    }

    public void setSunrise(Integer sunrise) {
        this.sunrise = sunrise;
    }

    public Integer getSunset() {
        return sunset;
    }

    public void setSunset(Integer sunset) {
        this.sunset = sunset;
    }

    public Double getTemp() {
        return temp;
    }

    public void setTemp(Double temp) {
        this.temp = temp;
    }

    public Double getFeelsLike() {
        return feelsLike;
    }

    public void setFeelsLike(Double feelsLike) {
        this.feelsLike = feelsLike;
    }

    public Integer getPressure() {
        return pressure;
    }

    public void setPressure(Integer pressure) {
        this.pressure = pressure;
    }

    public Integer getHumidity() {
        return humidity;
    }

    public void setHumidity(Integer humidity) {
        this.humidity = humidity;
    }

    public Double getDewPoint() {
        return dewPoint;
    }

    public void setDewPoint(Double dewPoint) {
        this.dewPoint = dewPoint;
    }

    public Double getUvi() {
        return uvi;
    }

    public void setUvi(Double uvi) {
        this.uvi = uvi;
    }

    public Integer getClouds() {
        return clouds;
    }

    public void setClouds(Integer clouds) {
        this.clouds = clouds;
    }

    public Integer getVisibility() {
        return visibility;
    }

    public void setVisibility(Integer visibility) {
        this.visibility = visibility;
    }

    public Double getWindSpeed() {
        return windSpeed;
    }

    public void setWindSpeed(Double windSpeed) {
        this.windSpeed = windSpeed;
    }

    public Integer getWindDeg() {
        return windDeg;
    }

    public void setWindDeg(Integer windDeg) {
        this.windDeg = windDeg;
    }

    public List<Weather> getWeather() {
        return weather;
    }

    public void setWeather(List<Weather> weather) {
        this.weather = weather;
    }
}
-1
Chinez 4 फरवरी 2021, 01:06
जांचें कि क्या आपने मेनिफेस्ट में इंटरनेट अनुमति जोड़ी है। यदि यह कारण नहीं है - क्या लॉग में कोई त्रुटि है?
 – 
Alex.Marynovskyi
4 फरवरी 2021, 01:09
मैंने मेनिफेस्ट में इंटरनेट अनुमति जोड़ी है, लॉग में एक भी त्रुटि नहीं है
 – 
Chinez
4 फरवरी 2021, 01:28
1
आधार URL के लिए http के बजाय https का उपयोग करने का प्रयास करें .. इसे उत्तर के रूप में पोस्ट करना सुनिश्चित नहीं है
 – 
Zain
4 फरवरी 2021, 03:02
अब यह java.lang.NullPointerException दिखाता है: वर्चुअल विधि 'java.lang.Integer com.tex.lightweatherforcast.first.Current.getDt ()' को रनटाइम पर एक शून्य ऑब्जेक्ट संदर्भ पर लागू करने का प्रयास करने के बाद मैंने HTTP को https में बदल दिया
 – 
Chinez
4 फरवरी 2021, 10:36
1
संभवतः (आपको जो अपवाद मिल रहा है उसके आधार पर) आप जेसन प्रतिक्रिया को गलत तरीके से पार्स कर रहे हैं। तो, इसे सरल बनाने का प्रयास करें - 1-2 क्षेत्रों के साथ केवल मुख्य इकाई (पैरेंट) को पार्स करें और यह पता लगाने का प्रयास करें कि पार्सिंग कहां गलत हुई
 – 
Alex.Marynovskyi
5 फरवरी 2021, 14:33

1 उत्तर

सबसे बढ़िया उत्तर

मैंने मौसम बदलकर त्रुटि को ठीक किया? एक कॉल के लिए? मेरे इंटरफ़ेस कॉल में

0
Chinez 6 फरवरी 2021, 21:26