Android应用程序空指针无法启动活动组件信息
如果有人能帮上忙,那就太好了 我一直收到一个空指针错误,这很奇怪,因为应用程序在几分钟前工作正常,我看不出有什么问题,它在启动时崩溃了。如果您需要其他帮助,请告诉我,以下是所有详细信息: 日志:Android应用程序空指针无法启动活动组件信息,android,android-studio,nullpointerexception,android-fragmentactivity,Android,Android Studio,Nullpointerexception,Android Fragmentactivity,如果有人能帮上忙,那就太好了 我一直收到一个空指针错误,这很奇怪,因为应用程序在几分钟前工作正常,我看不出有什么问题,它在启动时崩溃了。如果您需要其他帮助,请告诉我,以下是所有详细信息: 日志: 04-08 23:31:27.579 5906-5906/com.yupo.dominic.yupo E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity Compo
04-08 23:31:27.579 5906-5906/com.yupo.dominic.yupo E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yupo.dominic.yupo/com.yupo.dominic.yupo.LectureLogged}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.yupo.dominic.yupo.MenuFragment1.onCreateView(MenuFragment1.java:49)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
at android.app.Activity.performStart(Activity.java:5143)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
清单文件(如果有用):
MenuFragment1类:
package com.yupo.dominic.yupo;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseQueryAdapter;
import com.parse.ParseUser;
/**
* Created by Dominic on 03/03/2015.
*/
public class MenuFragment1 extends Fragment implements View.OnClickListener{
View rootview;
Spinner uniSpinner;
Button changeUniButton;
String uniSpinnerText;
ParseUser currentUser;
ParseQueryAdapter<ParseObject> adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
currentUser = ParseUser.getCurrentUser();
if(currentUser.getString("type").equalsIgnoreCase("Lecturer"))
{
rootview = inflater.inflate(R.layout.menu1_lecture, container, false);
TextView lectureUniTextView = (TextView) rootview.findViewById(R.id.lectureUniTextView);
TextView lectureChangeUniTextView = (TextView) rootview.findViewById(R.id.lectureChangeUniTextView);
uniSpinner = (Spinner) rootview.findViewById(R.id.uniSpinner);
uniSpinnerSetup();
changeUniButton = (Button) rootview.findViewById(R.id.changeUniButton);
changeUniButton.setOnClickListener(this);
if(currentUser.getString("university").equals(""))
{
lectureUniTextView.setText("You do not have a University set!");
lectureChangeUniTextView.setText("Select a University");
changeUniButton.setText("Set");
}
else
{
lectureUniTextView.setText("Your current University is: " + currentUser.getString("university"));
lectureChangeUniTextView.setText("Change University to");
changeUniButton.setText("Change");
}
}
else
{
rootview = inflater.inflate(R.layout.menu1_student, container, false);
TextView studentUniTextView = (TextView) rootview.findViewById(R.id.studentUniTextView);
TextView studentChangeUniTextView = (TextView) rootview.findViewById(R.id.studentChangeUniTextView);
uniSpinner = (Spinner) rootview.findViewById(R.id.uniSpinner);
uniSpinnerSetup();
changeUniButton = (Button) rootview.findViewById(R.id.changeUniButton);
changeUniButton.setOnClickListener(this);
if(currentUser.getString("university").equals(""))
{
studentUniTextView.setText("You do not have a University set!");
studentChangeUniTextView.setText("Select a University");
changeUniButton.setText("Set");
}
else
{
studentUniTextView.setText("Your current University is: " + currentUser.getString("university"));
studentChangeUniTextView.setText("Change University to");
changeUniButton.setText("Change");
}
}
return rootview;
}
public void uniSpinnerSetup()
{
ParseQueryAdapter.QueryFactory<ParseObject> factory = new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseQuery query = new ParseQuery("University");
return query;
}
};
adapter = new ParseQueryAdapter<ParseObject>(getActivity(), factory);
adapter.setTextKey("name");
uniSpinner.setAdapter(adapter);
uniSpinner.setSelection(1);
uniSpinner.setOnItemSelectedListener(new mySpinnerListener());
}
class mySpinnerListener implements Spinner.OnItemSelectedListener
{
@Override
public void onItemSelected(AdapterView parent, View v, int position,long id) {
ParseObject theSelectedObject = adapter.getItem(position);
uniSpinnerText = theSelectedObject.get("name").toString();
}
@Override
public void onNothingSelected(AdapterView parent) {
// TODO Auto-generated method stub
// Do nothing.
}
}
@Override
public void onClick(View v) {
if(currentUser.getString("university").equals(uniSpinnerText))
{
Toast.makeText(getActivity(),"Your University is already set to that!", Toast.LENGTH_LONG).show();
}
else
{
currentUser.put("university", uniSpinnerText);
currentUser.saveInBackground();
Toast.makeText(getActivity(), "University changed to: " + uniSpinnerText, Toast.LENGTH_LONG).show();
}
}
}
package com.yupo.dominic.yupo;
导入android.support.v4.app.Fragment;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.Button;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.parse.ParseObject;
导入com.parse.ParseQuery;
导入com.parse.ParseQueryAdapter;
导入com.parse.ParseUser;
/**
*由Dominic于2015年3月3日创建。
*/
公共类MenuFragment1扩展片段实现View.OnClickListener{
视图根视图;
纺纱机;
按钮转换按钮;
字符串单音文本;
ParseUser当前用户;
ParseQueryAdapter适配器;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
currentUser=ParseUser.getCurrentUser();
if(currentUser.getString(“type”).equalsIgnoreCase(“讲师”))
{
rootview=充气机。充气(R.layout.menu1_,容器,false);
TextView讲师NitextView=(TextView)rootview.findViewById(R.id.讲师NitextView);
TextView讲师更改单元ExtView=(TextView)rootview.findViewById(R.id.讲师更改单元ExtView);
uniSpinner=(微调器)rootview.findviewbyd(R.id.uniSpinner);
uniSpinnerSetup();
changeUniButton=(Button)rootview.findviewbyd(R.id.changeUniButton);
changeUniButton.setOnClickListener(此);
if(currentUser.getString(“大学”).equals(“”)
{
setText(“您没有大学套件!”);
讲师ChangeUnitExtView.setText(“选择一所大学”);
changeUniButton.setText(“Set”);
}
其他的
{
讲师NitextView.setText(“您当前的大学是:”+currentUser.getString(“大学”));
讲师更改UnitExtView.setText(“将大学更改为”);
changeUniButton.setText(“更改”);
}
}
其他的
{
rootview=充气机。充气(R.layout.menu1\u学生,容器,假);
TextView studentUniTextView=(TextView)rootview.findViewById(R.id.studentUniTextView);
TextView studentChangeUniTextView=(TextView)rootview.findViewById(R.id.studentChangeUniTextView);
uniSpinner=(微调器)rootview.findviewbyd(R.id.uniSpinner);
uniSpinnerSetup();
changeUniButton=(Button)rootview.findviewbyd(R.id.changeUniButton);
changeUniButton.setOnClickListener(此);
if(currentUser.getString(“大学”).equals(“”)
{
studentUniTextView.setText(“您没有大学设置!”);
studentchangeuntextview.setText(“选择一所大学”);
changeUniButton.setText(“Set”);
}
其他的
{
studentUniTextView.setText(“您当前的大学是:”+currentUser.getString(“大学”));
studentchangeuntextview.setText(“将大学更改为”);
changeUniButton.setText(“更改”);
}
}
返回rootview;
}
public void uniSpinnerSetup()
{
ParseQueryAdapter.QueryFactory=新建ParseQueryAdapter.QueryFactory(){
公共ParseQuery创建(){
ParseQuery=新的ParseQuery(“大学”);
返回查询;
}
};
适配器=新的ParseQueryAdapter(getActivity(),工厂);
adapter.setTextKey(“名称”);
uniSpinner.setAdapter(适配器);
单选(1);
setOnItemSelectedListener(新的mySpinnerListener());
}
类mySpinnerListener实现Spinner.OnItemSelectedListener
{
@凌驾
已选择公共位置(AdapterView父视图、视图v、整型位置、长id){
ParseObject theSelectedObject=adapter.getItem(位置);
uniSpinnerText=theSelectedObject.get(“name”).toString();
}
@凌驾
未选择公共无效(AdapterView父级){
//TODO自动生成的方法存根
//什么也不做。
}
}
@凌驾
公共void onClick(视图v){
if(currentUser.getString(“university”).equals(uniSpinnerText))
{
Toast.makeText(getActivity(),“您的大学已经设置为该值!”,Toast.LENGTH\u LONG.show();
}
其他的
{
currentUser.put(“大学”,uniSpinnerText);
currentUser.savenbackground();
Toast.makeText(getActivity(),“University”更改为:“+uniSpinnerText,Toast.LENGTH\u LONG.show()”;
}
}
}
menu1_student.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/selectUniFrame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Your Selected University: "
android:id="@+id/studentUniTextView"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/changeUni"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/selectUniFrame">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Change University to"
android:id="@+id/studentChangeUniTextView"
android:layout_alignParentLeft="true"/>
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/uniSpinner"
android:visibility="visible"
android:layout_below="@+id/studentChangeUniTextView"
android:spinnerMode="dropdown"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/changeUniButton"
android:layout_toRightOf="@+id/uniSpinner"
android:text="Change"/>
</RelativeLayout>
</RelativeLayout>
menu1_touch.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/selectUniFrame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Your Selected University: "
android:id="@+id/lectureUniTextView"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/changeUni"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/selectUniFrame">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Change University to"
android:id="@+id/lectureChangeUniTextView"
android:layout_alignParentLeft="true"/>
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/uniSpinner"
android:visibility="visible"
android:layout_below="@+id/lectureChangeUniTextView"
android:spinnerMode="dropdown"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/changeUniButton"
android:layout_toRightOf="@+id/uniSpinner"
android:text="Change"/>
</RelativeLayout>
</RelativeLayout>
而不是
if(currentUser.getString("university").equals(""))
使用
您的
currentUser
对象中似乎没有university
密钥
它可能在某一点上被填充,这就是它以前工作的原因
如果卸载/重新安装,则不会填充,
if(currentUser.getString("university").equals(""))
if(currentUser==null || currentUser.getString("university")==null || currentUser.getString("university").equals(""))