【问题标题】:RuntimeException: Unable to start activity ComponentInfo: java.lang.NullPointerExceptionRuntimeException:无法启动活动 ComponentInfo:java.lang.NullPointerException
【发布时间】:2012-12-13 23:34:35
【问题描述】:

您好,我正在尝试使用 web 服务 axis2 将 mysql 中的数据显示到 android listview 中。 当我运行我的应用程序时,会出现以下异常。 这是 Logcat 的详细信息

12-28 21:20:45.180: E/AndroidRuntime(406): FATAL EXCEPTION: main
12-28 21:20:45.180: E/AndroidRuntime(406): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kbj/com.kbj.Invitation}: java.lang.NullPointerException
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.os.Looper.loop(Looper.java:123)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-28 21:20:45.180: E/AndroidRuntime(406):  at java.lang.reflect.Method.invokeNative(Native Method)
12-28 21:20:45.180: E/AndroidRuntime(406):  at java.lang.reflect.Method.invoke(Method.java:521)
12-28 21:20:45.180: E/AndroidRuntime(406):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-28 21:20:45.180: E/AndroidRuntime(406):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-28 21:20:45.180: E/AndroidRuntime(406):  at dalvik.system.NativeStart.main(Native Method)
12-28 21:20:45.180: E/AndroidRuntime(406): Caused by: java.lang.NullPointerException
12-28 21:20:45.180: E/AndroidRuntime(406):  at com.kbj.Invitation.onCreate(Invitation.java:49)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-28 21:20:45.180: E/AndroidRuntime(406):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-28 21:20:45.180: E/AndroidRuntime(406):  ... 11 more
12-28 21:20:50.690: I/Process(406): Sending signal. PID: 406 SIG: 9

这是我的函数

1.网络服务类中的retrieveData

public ArrayList<InvitePlayerDetails> retrievePlayer(String userName){

    Connection conn=null;
    PreparedStatement stmt=null;

      ResultSet result = null; 
      String retrievedUserName = "";
      //Boolean b = false;
     // String retrievedPassword = "";
      ArrayList<InvitePlayerDetails> playersList = new ArrayList<InvitePlayerDetails>();

    try{


       conn = Util.getConnection();
       stmt =  conn.prepareStatement("SELECT kbj_username FROM kbj_registration");
       result = stmt.executeQuery();
       System.out.println(result);

       while(result.next()){
        retrievedUserName = result.getString("kbj_username");
        System.out.println(retrievedUserName);
        InvitePlayerDetails p1 = new InvitePlayerDetails(retrievedUserName, false);
       // ArrayList<InvitePlayerDetails> playersList = new ArrayList<InvitePlayerDetails>(retrievedUserName, b);
        playersList.add(p1);

        System.out.println("PlayerListAdded" + playersList);
    }


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

      finally
        {           
        Util.CloseDbResources(result, stmt, conn);

        }
return playersList;
}
}

这是我的 android 活动功能..

公共类邀请扩展活动 {

private final String NAMESPACE = "http://ws.kbj.com";
private final String URL = "http://10.0.2.2:8085/WS_KBJ/services/Kbj_WebService?wsdl";
private final String SOAP_ACTION = "http://ws.kbj.com/retrievePlayer";
private final String METHOD_NAME = "retrievePlayer";


@Override
protected void onCreate(Bundle savedInstanceState) {


    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.invitation);

    final TextView userName = (TextView) findViewById(R.id.CurPlayername);
    userName.setText(getIntent().getExtras().getString("UserName"));

    final Button fbBtn = (Button) findViewById(R.id.fbButton);
    final Button inviteBtn = (Button) findViewById(R.id.inviteBtn);
    ListView listView = (ListView) findViewById(R.id.invitePlayerList);  
    ArrayList<InvitePlayerDetails> playersList = new ArrayList<InvitePlayerDetails>();  


    playersList = retriveData();


    InvitePlayersBaseAdapter adapter = new InvitePlayersBaseAdapter(this, playersList);  
    listView.setAdapter(adapter);  
    listView.setOnItemClickListener(new OnItemClickListener() {  
        public void onItemClick(AdapterView<?> arg0, View v, int position,  
                long id) {  

        }  
    });  
    final Intent openFbOrTwLoginPage = new Intent(this, FbOrTwLogin.class);
    final Intent openNotificationPage = new Intent(this, Notification.class);
    fbBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            startActivity(openFbOrTwLoginPage);

        }
    });
    twBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            startActivity(openFbOrTwLoginPage);

        }
    });
    inviteBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            startActivity(openNotificationPage);

        }
}

public ArrayList<InvitePlayerDetails> retriveData(){
ArrayList<InvitePlayerDetails> playersList = new ArrayList<InvitePlayerDetails>();
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo unameProp =new PropertyInfo();
    unameProp.setName("userName");//Define the variable name in the web service method
    unameProp.setValue(title);//set value for userName variable
    unameProp.setType(String.class);//Define the type of the variable
    request.addProperty(unameProp);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try{
        androidHttpTransport.call(SOAP_ACTION, envelope);
           SoapPrimitive response = (SoapPrimitive)envelope.getResponse();


           System.out.println("SoapPriitive:"+response);
           //status1 = Boolean.parseBoolean(response.toString());

    }
    catch(Exception e){

    }


    return playersList;
}

}

我创建了一个 pojo 类,它是

public class InvitePlayerDetails {


private String invitedplayerName;
private boolean ckBox;
  public InvitePlayerDetails(String invitedplayerName,boolean cb1) {  
        this.invitedplayerName = invitedplayerName;  
        this.ckBox = cb1;  
    }  

public String getInvitedplayerName() {
    return invitedplayerName;
}
public void setInvitedplayerName(String invitedplayerName) {
    this.invitedplayerName = invitedplayerName;
}
public boolean getCkBox() {
    return ckBox;
}
public void setCkBox(boolean b) {
    this.ckBox = b;
}

}

请帮我解决这个问题.. 告诉我我的代码哪里出了问题.. 如果有人有关于使用axis2在列表视图中显示来自mysql的数据的代码,请在此处提供.. 对不起我的英语不好.. 提前谢谢..

【问题讨论】:

  • Caused by: java.lang.NullPointerException at com.kbj.Invitation.onCreate(Invitation.java:49) Invitation 中的第 49 行是什么?
  • 您好先生.. 邀请是 android android 类主.. 当我点击登录按钮时,控制进入邀请活动.. 这是我的登录类代码 btnLogin.setOnClickListener(new View.OnClickListener( ) { public void onClick(View arg0) { // TODO 自动生成的方法存根 boolean status = loginAction(); if (status == true){ intent.putExtra("UserName", user_Name); //intent.putExtra( "Content", listDescriptionString); startActivity(openInvitationPage); }else{ result.setText("登录失败!!"); } } });
  • 请点击“edit”将您的代码添加到您的问题中并指出哪一行是 49。但您似乎忘记初始化 btnLoginintentresult
  • 您在 intent 中添加了价值,但将 openInvitationPage 传递给 startActivity,因此请确保您使用正确的意图来开始下一个活动
  • @Sam Hi 现在检查一下先生.. 我已经在代码详细信息中编辑了邀请类

标签: android mysql web-services axis2 listview-selector


【解决方案1】:

你没有指出哪一行是 49,但我有几个猜测:

userName.setText(getIntent().getExtras().getString("UserName"));

这里你不检查getIntent()getExtras(),甚至getString("UserName")是否返回null。在尝试使用它之前,您应该确保每个方法都返回有效数据。

我也没有在其他任何地方看到twBtn

twBtn.setOnClickListener(new View.OnClickListener() {

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        startActivity(openFbOrTwLoginPage);

    }
});

它没有被初始化,甚至没有被定义......

如果这些都不在第 49 行,请仔细检查您的布局 invitation.xml 以确保您使用 findViewById() 搜索的每个视图都在此布局中。否则findViewById() 将返回 null...

【讨论】:

  • "如果这些都不在第 49 行.."。哈哈,如果它甚至不是 findViewById() 那么检查第 49 行,你会在那里得到一个 NullPointerException。 :D
  • @Sam 嗨,这里是 twBtn 语句 final Button twBtn = (Button) findViewById(R.id.twButton);像这样我在 android 类中声明了 twbtn 并在 xml 文件中的 twButton 中声明了这个 id..
  • @MallikarjunHampannavar @MallikarjunHampannavar playersList = retriveData(); 不可能导致 NullPointerException...您在收到这些 LogCat 错误后更改了 Inivitation 吗?也请在您的问题中发布invitation.xml
  • @Sam sir.. 我已经修复了 NullPointerExecption..我的要求是将 mysql 中的数据显示到 listview 中.. 为此我尝试了 2-3 天但没有成功.. 我发现谷歌中的代码,但它们在 php 和 json 中。我不知道 php 和 json,所以理解这些代码有点困难。您能否建议或提供有关使用axis2 Web服务将mysql中的数据显示到listview中的代码?请先生紧急
  • 很高兴您解决了 NullPointerException。但我还没有在 Android 上使用 MySQL,所以很抱歉我无法帮助你......祝你好运!
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多