Java 屏幕旋转时出现运行时错误

Java 屏幕旋转时出现运行时错误,java,android,rotation,runtime-error,screen-orientation,Java,Android,Rotation,Runtime Error,Screen Orientation,我有一个密码: 主要代码: package com.example.m.i.f.projectsandroidtestapp; import java.text.SimpleDateFormat; import java.util.Date; import org.json.JSONException; import org.json.JSONObject; import android.widget.GridView; import and

我有一个密码:

主要代码:

package com.example.m.i.f.projectsandroidtestapp; 


   import java.text.SimpleDateFormat; 
   import java.util.Date; 

   import org.json.JSONException; 
   import org.json.JSONObject; 
   import android.widget.GridView; 
   import android.os.AsyncTask; 
   import android.os.Bundle; 
   import android.os.Parcelable; 
   import android.support.v4.app.FragmentActivity; 
   import android.support.v4.view.ViewPager; 
   import android.util.Log; 
   import android.view.LayoutInflater; 
   import android.view.View; 
   import android.view.ViewGroup; 
   import android.view.View.OnClickListener; 
   import android.widget.Button; 
   import android.widget.TextView; 
   import com.actionbarsherlock.app.SherlockFragment; 
   import com.directionalviewpager.DirectionalViewPager; 
   import com.example.m.i.f.projectsandroidtestapp.WeatherHttpClient; 
   import com.example.m.i.f.projectsandroidtestapp.adapter.DailyForecastPageAdapter; 
   import com.example.m.i.f.projectsandroidtestapp.fragment.DayForecastFragment; 
   import com.example.m.i.f.projectsandroidtestapp.model.Weather; 
   import com.example.m.i.f.projectsandroidtestapp.model.WeatherForecast; 


 public class ForecastWeatherActivity extends SherlockFragment { 
Parcelable state; 
TextView cityText; 
TextView condDescr; 
TextView temp; 
TextView press; 
TextView windSpeed; 
TextView minmaxTempNow; 
TextView hum; 
TextView textTemp; 
TextView textHum; 
TextView textPress; 
TextView textWind; 
TextView date; 
Button Update; 
String dateSt; 
GridView GridV; 
String humidT; 
String cityT; 
String tempT; 
String descrT; 
String mmT; 
String windT; 
String pressT; 
public JSONWeatherTask mt; 
public JSONForecastWeatherTask ft; 
JSONWeatherTask task; 
JSONForecastWeatherTask task1; 
WeatherForecast forecast; 
Weather weather; 
Bundle bundle; 
final String LOG_TAG = "myLogs"; 
DayForecastFragment fragment1; 
//количесво дней для прогноза 
static String forecastDaysNum = "7"; 
ViewPager pager; 
final String city = "Kirovohrad"; 
final String lang = "en"; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.weathertab, container, false); 
} 
@Override
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    //setContentView(R.layout.weathertab); 



    //дата 
    SimpleDateFormat sdf = new SimpleDateFormat("d MMMMMM, EEEEE"); 
    dateSt = sdf.format(new Date());; 
    //подключение элементов 
    date = (TextView) getView().findViewById(R.id.datenow); 
    Update = (Button) getView().findViewById(R.id.update); 
    textWind = (TextView) getView().findViewById(R.id.textWind); 
    textPress = (TextView) getView().findViewById(R.id.textPress); 
    textHum = (TextView) getView().findViewById(R.id.textHum); 
    textTemp = (TextView) getView().findViewById(R.id.textTemp); 
    cityText = (TextView) getView().findViewById(R.id.cityText); 
    temp = (TextView) getView().findViewById(R.id.temp); 
    condDescr = (TextView) getView().findViewById(R.id.skydesc); 
    pager = (ViewPager) getView().findViewById(R.id.pager); 
    minmaxTempNow = (TextView) getView().findViewById(R.id.minmaxTempNow); 
    hum = (TextView) getView().findViewById(R.id.hum); 
    press = (TextView) getView().findViewById(R.id.press); 
    windSpeed = (TextView) getView().findViewById(R.id.windSpeed); 
    //конпка обновить   
    Update.setOnClickListener (new OnClickListener() { 
        public void onClick(View v) { 
             mt = new JSONWeatherTask(); 
             mt.execute(new String[]{city,lang}); 
            ft = new JSONForecastWeatherTask(); 
             ft.execute(new String[]{city,lang, forecastDaysNum}); 
           } 
         }); 
    bundle = new Bundle(); 
    //запуск 
    task = new JSONWeatherTask(); 
    task.execute(new String[]{city,lang}); 

task1 = new JSONForecastWeatherTask(); 
task1.execute(new String[]{city,lang, forecastDaysNum}); 

              } 


//класс погоды 
   private class JSONWeatherTask extends AsyncTask<String, Void, Weather> { 

    @Override
    protected Weather doInBackground(String... params) { 
        Weather weather = new Weather(); 
        String data = ( (new WeatherHttpClient()).getWeatherData(params[0], params[1])); 

        try { 
            weather = JSONWeatherParser.getWeather(data); 
            System.out.println("Weather ["+weather+"]"); 


        } catch (JSONException e) {              
            e.printStackTrace(); 
        } 
        return weather; 

} 


protected void onPostExecute (Weather weather) {             
        super.onPostExecute(weather); 

        //присвоение значений 
        humidT =(" " + weather.currentCondition.getHumidity() + "%"); 
        cityT = (weather.location.getCity()); 
        tempT = ("" + Math.round((weather.temperature.getTemp() - 275.15 )) + " C"); 
        descrT = (weather.currentCondition.getCondition() + "(" + weather.currentCondition.getDescr() + ")"); 
        mmT = (" " + Math.round(weather.temperature.getMinTemp() -275.15) + "/" + Math.round(weather.temperature.getMaxTemp() - 275.15)); 
        pressT = (" " + weather.currentCondition.getPressure() + " hPa"); 
        windT = (" " + weather.wind.getSpeed() + " mps"); 
        date.setText(dateSt); 
        textWind.setText("wind: "); 
        textPress.setText("pressure: "); 
        textHum.setText("humidity: "); 
        textTemp.setText("temperature: "); 
        cityText.setText(cityT); 
        temp.setText(tempT); 
        condDescr.setText(descrT); 
        minmaxTempNow.setText(mmT); 
        hum.setText(humidT); 
        press.setText(pressT); 
        windSpeed.setText(windT); 

    } 



  } 

//класс прогноза погоды 
private class JSONForecastWeatherTask extends AsyncTask<String, Void, WeatherForecast> { 

    @Override
    protected WeatherForecast doInBackground(String... params) { 

        String data = ( (new WeatherHttpClient()).getForecastWeatherData(params[0], params[1], params[2])); 
        WeatherForecast forecast = new WeatherForecast(); 
        try { 
            forecast = JSONWeatherParser.getForecastWeather(data); 
            System.out.println("Weather ["+forecast+"]"); 


        } catch (JSONException e) {              
            e.printStackTrace(); 
        } 
        return forecast; 

} 




@Override
    protected void onPostExecute(WeatherForecast forecastWeather) {          
        super.onPostExecute(forecastWeather); 


        DailyForecastPageAdapter adapter = new DailyForecastPageAdapter(Integer.parseInt(forecastDaysNum), getActivity().getSupportFragmentManager(), forecastWeather); 
        state = adapter.saveState(); 
        adapter.restoreState(state, null); 
        pager.setAdapter(adapter); 
        state = adapter.saveState(); 
    } 



    } 


       } 
适配器:

 package com.example.m.i.f.projectsandroidtestapp.adapter; 
        import java.text.SimpleDateFormat; 
        import java.util.Calendar; 
        import java.util.Date; 
        import java.util.GregorianCalendar; 
        import com.example.m.i.f.projectsandroidtestapp.fragment.DayForecastFragment; 
        import com.example.m.i.f.projectsandroidtestapp.model.DayForecast; 
        import com.example.m.i.f.projectsandroidtestapp.model.WeatherForecast; 
      import android.os.Parcelable; 
     import android.support.v4.app.Fragment; 
     import android.support.v4.app.FragmentManager; 
       import android.support.v4.app.FragmentPagerAdapter; 
      import android.support.v4.app.FragmentStatePagerAdapter; 
    public class DailyForecastPageAdapter extends FragmentStatePagerAdapter { 
int numDays; 
FragmentManager fm; 
WeatherForecast forecast; 
//формат даты 
static SimpleDateFormat sdf = new SimpleDateFormat("E, dd-MM"); 
public DailyForecastPageAdapter(int numDays, FragmentManager fm, WeatherForecast forecast) { 
    super(fm); 
    this.numDays = numDays; 
    this.fm = fm; 
    this.forecast = forecast;    
} 
// заголовок страницы 
public CharSequence getPageTitle(int position) { 
    Date d = new Date(); 
    Calendar gc =  new GregorianCalendar(); 
    gc.setTime(d); 
    gc.add(GregorianCalendar.DAY_OF_MONTH, position); 
    return sdf.format(gc.getTime()); 
} 
@Override
public Fragment getItem(int num) { 
    DayForecast dayForecast = (DayForecast) forecast.getForecast(num); 
    DayForecastFragment f = new DayForecastFragment(); 
    f.setForecast(dayForecast); 
    return f; 
} 
@Override
public int getCount() { 
    return numDays; 
} 
 public void restoreState(Parcelable arg0, ClassLoader arg1){ 
    } 
 public Parcelable saveState(){ 
        return null; 
    } 
   } 
现在是我的屏幕旋转问题。我读了很多关于使用片段保存状态的例子,但不理解。当我旋转屏幕时,出现错误“应用程序已停止”

有一个LogCat:

10-29 13:52:50.262:W/dalvikvm(1601):threadid=1:线程以未捕获异常退出(组=0xa629c288) 10-29 13:52:50.286:E/AndroidRuntime(1601):致命异常:main 10-29 13:52:50.286:E/AndroidRuntime(1601):java.lang.RuntimeException:无法启动活动组件信息{com.example.m.i.f.projectsandroidtestapp/com.example.m.i.f.projectsandroidtestapp.main活动}:java.lang.NullPointerException 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3512) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.access$700(ActivityThread.java:130) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.os.Handler.dispatchMessage(Handler.java:99)上 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.os.Looper.loop(Looper.java:137) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.main(ActivityThread.java:4745)上 10-29 13:52:50.286:E/AndroidRuntime(1601):位于java.lang.reflect.Method.Invokenactive(本机方法) 10-29 13:52:50.286:E/AndroidRuntime(1601):在java.lang.reflect.Method.invoke(Method.java:511) 10-29 13:52:50.286:E/AndroidRuntime(1601):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 10-29 13:52:50.286:E/AndroidRuntime(1601):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-29 13:52:50.286:E/AndroidRuntime(1601):在dalvik.system.NativeStart.main(本机方法) 10-29 13:52:50.286:E/AndroidRuntime(1601):由以下原因引起:java.lang.NullPointerException 10-29 13:52:50.286:E/AndroidRuntime(1601):在com.example.m.i.f.projects和roidTestApp.fragment.DayForecastFragment.onCreateView(DayForecastFragment.java:43) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:552) 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)上 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.Activity.performStart(Activity.java:5018)上 10-29 13:52:50.286:E/AndroidRuntime(1601):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)

我希望你能帮助我,这是我最后的机会(

onCreateView()
DayForecastFragment.java
第43行取消了对
null
的引用


onCreateView()
中设置一个调试器断点,在调试模式下运行程序,单步执行并检查变量值,以了解发生了什么以及为什么发生。如果您想作为一名开发人员生存下来,学习如何调试是一项关键技能。

哪一行代码是以片段形式编写的:43
 package com.example.m.i.f.projectsandroidtestapp.adapter; 
        import java.text.SimpleDateFormat; 
        import java.util.Calendar; 
        import java.util.Date; 
        import java.util.GregorianCalendar; 
        import com.example.m.i.f.projectsandroidtestapp.fragment.DayForecastFragment; 
        import com.example.m.i.f.projectsandroidtestapp.model.DayForecast; 
        import com.example.m.i.f.projectsandroidtestapp.model.WeatherForecast; 
      import android.os.Parcelable; 
     import android.support.v4.app.Fragment; 
     import android.support.v4.app.FragmentManager; 
       import android.support.v4.app.FragmentPagerAdapter; 
      import android.support.v4.app.FragmentStatePagerAdapter; 
    public class DailyForecastPageAdapter extends FragmentStatePagerAdapter { 
int numDays; 
FragmentManager fm; 
WeatherForecast forecast; 
//формат даты 
static SimpleDateFormat sdf = new SimpleDateFormat("E, dd-MM"); 
public DailyForecastPageAdapter(int numDays, FragmentManager fm, WeatherForecast forecast) { 
    super(fm); 
    this.numDays = numDays; 
    this.fm = fm; 
    this.forecast = forecast;    
} 
// заголовок страницы 
public CharSequence getPageTitle(int position) { 
    Date d = new Date(); 
    Calendar gc =  new GregorianCalendar(); 
    gc.setTime(d); 
    gc.add(GregorianCalendar.DAY_OF_MONTH, position); 
    return sdf.format(gc.getTime()); 
} 
@Override
public Fragment getItem(int num) { 
    DayForecast dayForecast = (DayForecast) forecast.getForecast(num); 
    DayForecastFragment f = new DayForecastFragment(); 
    f.setForecast(dayForecast); 
    return f; 
} 
@Override
public int getCount() { 
    return numDays; 
} 
 public void restoreState(Parcelable arg0, ClassLoader arg1){ 
    } 
 public Parcelable saveState(){ 
        return null; 
    } 
   } 
10-29 13:52:50.286: E/AndroidRuntime(1601): Caused by: java.lang.NullPointerException
10-29 13:52:50.286: E/AndroidRuntime(1601): at com.example.m.i.f.projectsandroidtestapp.fragment.DayForecastFragment.onCreateView(DayForecastFragment.java:43)