2014-10-09 77 views
-1

我遇到了转换问题。希望可以有人帮帮我。飞溅后NullPointer异常

首先,启动画面Activity的代码。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 

    /****** Create Thread that will sleep for 5 seconds *************/   
    Thread background = new Thread() 
    { 
     public void run() 
     { 
      try 
      { 
       // Thread will sleep for 5 seconds 
       sleep(5*1000); 

       // After 5 seconds redirect to another intent 
       if(SharedPreferences.getUserName(getApplication()) != null && SharedPreferences.getUserName(getApplication()).length() == 0) 
       { 
        Intent i = new Intent(getBaseContext(), LoginActivity.class); 
        startActivity(i); 
       } 

       else 
       { 
        Intent i = new Intent(getBaseContext(), MainActivity.class); 
        startActivity(i); 
       } 

       //Remove activity 
       finish(); 

      } 

      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    // start thread 
    background.start(); 

} 

接下来,登录活动代码:

公共类LoginActivity扩展FragmentActivity {

public static String user_id = ""; 

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

    Log.i("LoginActivity", "Start Login Activity"); 

    int titleId = getResources().getIdentifier("title_activity_login", "id", "android"); 
    TextView abTitle = (TextView) findViewById(titleId); 
    abTitle.setTextColor(Color.WHITE); 
} 

然后,当登录活动开始启动片段:

public static class CardSectionFragment extends Fragment 
{ 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    Button registerBtn, toggleBtn; 
    EditText useridET; 
    EditText passwordET; 
    EditText dobET; 
    Spinner daySpin, mthSpin, yrSpin; 
    LinearLayout dobLayout; 

    public CardSectionFragment() 
    { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     recLifeCycle_with_savedInstanceState(savedInstanceState); 
     View rootView = inflater.inflate(R.layout.fragment_register, 
       container, false); 
     registerBtn = (Button) rootView.findViewById(R.id.registerBtn); 
     toggleBtn = (Button) rootView.findViewById(R.id.toggleBtn); 
     useridET = (EditText) rootView.findViewById(R.id.useridET); 
     passwordET = (EditText) rootView.findViewById(R.id.passwordET); 

     dobLayout = (LinearLayout) rootView.findViewById(R.id.dobLayout); 

     daySpin = (Spinner) rootView.findViewById(R.id.daySpin); 
     mthSpin = (Spinner) rootView.findViewById(R.id.mthSpin); 
     yrSpin = (Spinner) rootView.findViewById(R.id.yrSpin); 

     ArrayAdapter<String> dayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, R.array.date_spin); 
     dayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     ArrayAdapter<String> mthAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, R.array.mnth_spin); 
     mthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     ArrayAdapter<String> yrAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, R.array.year_spin); 
     yrAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     daySpin.setAdapter(dayAdapter); 
     mthSpin.setAdapter(mthAdapter); 
     yrSpin.setAdapter(yrAdapter); 

     registerBtn.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       ((MainActivity) getActivity()).hideSoftKeyboard(); 
       // TODO Auto-generated method stub 
       // ((MainActivity) getActivity()).registerSuccess(""); 
       if (registerBtn.getText().toString().equals("Sign Up")) 
       { 
        String dob = daySpin.getSelectedItem().toString() + "-" + mthSpin.getSelectedItem().toString() + "-" + yrSpin.getSelectedItem().toString().substring(Math.max(yrSpin.getSelectedItem().toString().length() - 2, 0)); 
        new RegisterUserAsyncTask((LoginActivity) getActivity()).execute(useridET.getText().toString(), passwordET.getText().toString(), dob); 
       } 

       else 
       { 
        if (registerBtn.getText().toString().equals("Login")) 
        { 
         user_id = useridET.getText().toString(); 
         new LoginUserAsyncTask((LoginActivity) getActivity()).execute(useridET.getText().toString(),passwordET.getText().toString()); 

        } 
       } 
      } 

     }); 

     toggleBtn.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       // TODO Auto-generated method stub 
       if (registerBtn.getText().toString().equals("Sign Up")) 
       { 
        dobLayout.setVisibility(View.GONE); 
        registerBtn.setText("Login"); 
        toggleBtn.setText("Do not have an account? Register here."); 
       } 

       else 
       { 
        dobLayout.setVisibility(View.VISIBLE); 
        registerBtn.setText("Sign Up"); 
        toggleBtn.setText("To begin, login with your account"); 
       } 
      } 

     }); 

     return rootView; 
    } 

    public void recLifeCycle() { 

     String className = getClass().getSimpleName(); 
     StackTraceElement[] s = Thread.currentThread().getStackTrace(); 
     String methodName = s[3].getMethodName(); 

     String msg = className + "." + methodName; 

     // Toast.makeText(getActivity(), 
     // msg, Toast.LENGTH_SHORT).show(); 
     Log.i("MYTAG", msg); 
    } 

    public void recLifeCycle(String note) { 

     String className = getClass().getSimpleName(); 
     StackTraceElement[] s = Thread.currentThread().getStackTrace(); 
     String methodName = s[3].getMethodName(); 

     String msg = className + "." + methodName; 

     // Toast.makeText(getActivity(), 
     // msg, Toast.LENGTH_SHORT).show(); 
     Log.i("MYTAG", msg + "/" + note); 
    } 

    public void recLifeCycle_with_savedInstanceState(Bundle state) { 

     String stateMsg; 
     if (state == null) { 
      stateMsg = "savedInstanceState == null"; 
     } else { 
      stateMsg = "savedInstanceState != null"; 
     } 

     String className = getClass().getSimpleName(); 
     StackTraceElement[] s = Thread.currentThread().getStackTrace(); 
     String methodName = s[3].getMethodName(); 

     String msg = className + "." + methodName + "/" + stateMsg; 

     // Toast.makeText(getActivity(), 
     // msg, Toast.LENGTH_SHORT).show(); 
     Log.i("MYTAG", msg); 
    } 

    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onResume(); 

    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onDestroy(); 
    } 

    @Override 
    public void onDestroyView() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onDestroyView(); 

    } 

    @Override 
    public void onDetach() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onDetach(); 
    } 

    @Override 
    public void onPause() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onPause(); 
    } 

    @Override 
    public void onStart() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onStart(); 
    } 

    @Override 
    public void onStop() { 
     // TODO Auto-generated method stub 
     recLifeCycle(); 
     super.onStop(); 
    } 
} 

而且,这是错误:(我能找到的最接近的东西包含错误)

10-09 17:17:01.642: I/LoginActivity(12487): Start Login Activity 
 
10-09 17:17:01.652: D/AndroidRuntime(12487): Shutting down VM 
 
10-09 17:17:01.652: W/dalvikvm(12487): threadid=1: thread exiting with uncaught exception (group=0x42f00500) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): FATAL EXCEPTION: main 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): java.lang.RuntimeException: Unable to start activity ComponentInfo{nyp.edu.sg.alumnigo/nyp.edu.sg.alumnigo.LoginActivity}: java.lang.NullPointerException 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread.access$600(ActivityThread.java:148) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.os.Handler.dispatchMessage(Handler.java:99) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.os.Looper.loop(Looper.java:150) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread.main(ActivityThread.java:5406) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at java.lang.reflect.Method.invokeNative(Native Method) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at java.lang.reflect.Method.invoke(Method.java:525) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at dalvik.system.NativeStart.main(Native Method) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): Caused by: java.lang.NullPointerException 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at nyp.edu.sg.alumnigo.LoginActivity.onCreate(LoginActivity.java:42) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.Activity.performCreate(Activity.java:5303) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 
 
10-09 17:17:01.662: E/AndroidRuntime(12487): \t ... 11 more

我不知道为什么它有一个空指针,请大家帮忙。 42行是abTitle.setTextColor(Color.WHITE);在登录活动顺便说一句。

编辑:

这里是我的activity_main.xml中

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" /> 
+2

你可以发布activity_main.xml吗? – Blackbelt 2014-10-09 09:55:58

+0

这只是一个假设,但可能是由于给定的id在activity_main布局中找不到您的TextView。为了澄清这一点,请将acitivty_main.xml作为黑带发布。 – everald 2014-10-09 10:14:27

+0

即将做。代码现在不在我身边。 – 2014-10-09 16:13:30

回答

0

找到了答案: 而不是使用title_activity_login的,我应该用action_bar_title。 我认为它是@string资源ID。因此,它无法找到。对带来的麻烦表示抱歉。

0

如果您知道有关的view-id,试图取代这一行:

TextView abTitle = (TextView) findViewById(titleId); 

有了:

TextView abTitle = (TextView) getWindow().getDecorView().getRootView().findViewById(titleId); 

如果你想改变Android的标准ActionBar使用的标题:

getActionBar().setTitle("your title");