В настоящее время я пытаемся сделать вид списка с изображениями и текстом, но в то время как я компилируется весь код перед Этой проблемой ОШИБКИ:java.lang.NullPointerException: Попытка вызвать виртуальный метод на нулевой ссылке на объект
FATAL EXCEPTION: main
Process: com.example.vishal.stormy, PID: 7884
java.lang.NullPointerException: Attempt to invoke virtual method 'com.example.vishal.stormy.Day[] com.example.vishal.stormy.Forecast.getDailyForecast()' on a null object reference
at com.example.vishal.stormy.MainActivity$2.onClick(MainActivity.java:115)
at android.view.View.performClick(View.java:5207)
at android.view.View$PerformClick.run(View.java:21177)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
MainActivity.Java
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
public static final String DAILY_FORECAST = "DAILY_FORECAST";
private Forecast mForecast;
private Current mCurrent;
private TextView mtemperatureLabel;
private TextView mtimeLabel;
private TextView mhumidityLabel;
private TextView mprecipLabel;
private ImageView IconImageView;
private TextView SummaryLabel;
private Button DailyButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtemperatureLabel = (TextView)findViewById(R.id.temperatureLabel);
mtimeLabel = (TextView)findViewById(R.id.timeLabel);
mhumidityLabel = (TextView)findViewById(R.id.humidityLabel);
mprecipLabel = (TextView)findViewById(R.id.precipLabel);
IconImageView= (ImageView) findViewById(R.id.StormyIcon);
mtimeLabel = (TextView)findViewById(R.id.timeLabel);
SummaryLabel = (TextView)findViewById(R.id.summaryLabel);
DailyButton=(Button)findViewById(R.id.DailyButton);
String apiKey = "27974c4bc33201748eaf542a6769c3b7";
double latitude = 28.7041;
double longitude = 77.1025;
String forecastUrl = "https://api.forecast.io/forecast/" + apiKey +
"/" + latitude + "," + longitude;
if (isNetworkAvailable()) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(forecastUrl)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String jsonData = response.body().string();
Log.v(TAG, jsonData);
if (response.isSuccessful()) {
mCurrent = getCurrentDetails(jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
updateDisplay();
}
});
} else {
alertUserAboutError();
}
}
catch (IOException e) {
Log.e(TAG, "Exception caught: ", e);
}
catch (JSONException e) {
Log.e(TAG, "Exception caught: ", e);
}
}
});
}
else {
Toast.makeText(this, getString(R.string.network_unavailable_message),
Toast.LENGTH_LONG).show();
}
Log.d(TAG, "Main UI code is running!");
DailyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,DailyForecastActivity.class);
intent.putExtra(DAILY_FORECAST, mForecast.getDailyForecast());
startActivity(intent);
}
});
}
private void updateDisplay() {
mtemperatureLabel.setText(mCurrent.getMtemperature()+"");
mtimeLabel.setText(mCurrent.getMtime()+"");
mhumidityLabel.setText(mCurrent.getMhumidity()+"");
mprecipLabel.setText(mCurrent.getMprecipchance()+"");
SummaryLabel.setText(mCurrent.getMsummary()+"");
}
private Current getCurrentDetails(String jsonData) throws JSONException {
JSONObject forecast = new JSONObject(jsonData);
String timezone = forecast.getString("timezone");
Log.i(TAG, "From JSON: " + timezone);
JSONObject currently = forecast.getJSONObject("currently");
Current current = new Current();
current.setMhumidity(currently.getDouble("humidity"));
current.setMtime(currently.getLong("time"));
current.setIcon(currently.getString("icon"));
current.setMprecipchance(currently.getDouble("precipProbability"));
current.setMsummary(currently.getString("summary"));
current.setMtemperature(currently.getDouble("temperature"));
current.setMtimezone(timezone);
Log.d(TAG, current.getFormattedTime());
return current;
}
private boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if (networkInfo != null && networkInfo.isConnected()) {
isAvailable = true;
}
return isAvailable;
}
private void alertUserAboutError() {
AlertDialogFragment dialog = new AlertDialogFragment();
dialog.show(getFragmentManager(), "error_dialog");
}}
Day.java
public class Day implements Parcelable {
private long mtime;
private String mSummary;
private double mTemperatureMax;
private String mIcon;
private String mTimezone;
private Current current;
private Day(Parcel in) {
mtime = in.readLong();
mSummary = in.readString();
mTemperatureMax = in.readDouble();
mIcon = in.readString();
mTimezone = in.readString();
}
public String getSummary() {
return mSummary;
}
public void setSummary(String summary) {
mSummary = summary;
}
public long getMtime() {
return mtime;
}
public void setMtime(long mtime) {
this.mtime = mtime;
}
public int getTemperatureMax() {
return (int)Math.round(mTemperatureMax);
}
public void setTemperatureMax(double temperatureMax) {
mTemperatureMax = temperatureMax;
}
public String getIcon() {
return mIcon;
}
public void setIcon(String icon) {
mIcon = icon;
}
public String getTimezone() {
return mTimezone;
}
public void setTimezone(String timezone) {
mTimezone = timezone;
}
public int getIconId() {
return Forecast.getIconId(mIcon);
}
public String getDayOfTheWeek(){
SimpleDateFormat formatter = new SimpleDateFormat("EEEE");
formatter.setTimeZone(TimeZone.getTimeZone(mTimezone));
Date dateTime = new Date(mtime*1000);
return formatter.format(dateTime);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(mtime);
dest.writeString(mSummary);
dest.writeDouble(mTemperatureMax);
dest.writeString(mIcon);
dest.writeString(mTimezone);
}
public Day(){ }
public static final Creator<Day> CREATOR = new Creator<Day>() {
@Override
public Day createFromParcel(Parcel source) {
return new Day(source);
}
@Override
public Day[] newArray(int size) {
return new Day[size];
}
};
}
DailyForecastActivity.java
public class DailyForecastActivity extends ListActivity {
private Day mDays[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_forecast);
Intent intent = getIntent();
Parcelable[] parcelables = intent.getParcelableArrayExtra(MainActivity.DAILY_FORECAST);
mDays= Arrays.copyOf(parcelables, parcelables.length,Day[].class);
DayAdapter adapter = new DayAdapter(this, mDays);
setListAdapter(adapter);
}}
DayAdapter.java
public class DayAdapter extends BaseAdapter {
private Context mContext;
private Day[] mdays;
public DayAdapter(Context context,Day[] days){
mContext= context;
mdays= days;
}
@Override
public int getCount() {
return mdays.length;
}
@Override
public Object getItem(int position) {
return mdays[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView= LayoutInflater.from(mContext).inflate(R.layout.daily_list_item,null);
holder = new ViewHolder();
holder.iconImageView = (ImageView)convertView.findViewById(R.id.iconImageView);
holder.temperatureLabel= (TextView)convertView.findViewById(R.id.temperatureLabel);
holder.dayLabel = (TextView)convertView.findViewById(R.id.dayNameLabel);
convertView.setTag(holder);
}
else{
holder= (ViewHolder)convertView.getTag();
}
Day day = mdays[position];
holder.iconImageView.setImageResource(day.getIconId());
holder.temperatureLabel.setText(day.getTemperatureMax()+"");
holder.dayLabel.setText(day.getDayOfTheWeek());
return convertView;
}
private static class ViewHolder {
ImageView iconImageView;
TextView temperatureLabel;
TextView dayLabel;}}
вы ничего не пишете в своем значении 'mForecast' и пытаетесь вызвать его метод. –