[英]Why does this activity unexpectedly closes my android?
此代碼的作用是將用戶注冊到gcm的服務器,並注冊到我的服務器以添加到mysql數據庫中。 它還寫入用戶首選項。 在gcm服務器和我的服務器上完成創建用戶后,該應用程序意外停止。 請幫幫我嗎?
package com.package.name;
import static com.package.name.CommonUtilities.SENDER_ID;
import static com.package.name.CommonUtilities.SERVER_URL;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class RegisterActivity extends Activity {
// alert dialog manager
AlertDialogManager alert = new AlertDialogManager();
// Internet detector
ConnectionDetector cd;
// UI elements
EditText txtName;
EditText txtEmail;
// Register button
Button btnRegister;
// Session Manager Class
SessionManager session;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
// Session Manager
session = new SessionManager(getApplicationContext());
cd = new ConnectionDetector(getApplicationContext());
session.checkLogin();
// Check if Internet present
if (!cd.isConnectingToInternet()) {
// Internet Connection is not present
alert.showAlertDialog(RegisterActivity.this,
"Internet Connection Error",
"Please connect to working Internet connection", false);
// stop executing code by return
return;
}
// Check if GCM configuration is set
if (SERVER_URL == null || SENDER_ID == null || SERVER_URL.length() == 0
|| SENDER_ID.length() == 0) {
// GCM sernder id / server url is missing
alert.showAlertDialog(RegisterActivity.this, "Configuration Error!",
"Please set your Server URL and GCM Sender ID", false);
// stop executing code by return
return;
}
txtName = (EditText) findViewById(R.id.txtName);
txtEmail = (EditText) findViewById(R.id.txtEmail);
btnRegister = (Button) findViewById(R.id.btnRegister);
/*
* Click event on Register button
* */
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// Read EditText dat
String name = txtName.getText().toString();
String email = txtEmail.getText().toString();
// Check if user filled the form
if(name.trim().length() > 0 && email.trim().length() > 0){
// Launch Main Activity
Intent i = new Intent(getApplicationContext(), MainActivity.class);
// Registering user on our server
// Sending registraiton details to MainActivity
i.putExtra("name", name);
i.putExtra("email", email);
session.registerEntry();
SharedPreferences pref = getApplicationContext().getSharedPreferences("A4APrefs", 0); // 0 - for private mode
Editor editor = pref.edit();
Random r = new Random();
int pairId = r.nextInt(999999-100000) + 100000;
editor.putInt("conId", pairId); // Storing integer
editor.commit(); // commit changes
startActivity(i);
finish();
}else{
// user doen't filled that data
// ask him to fill the form
alert.showAlertDialog(RegisterActivity.this, "Registration Error!", "Please enter your details", false);
}
}
});
}
}
為什么該活動運行一次后會關閉? 我對android真的很陌生,對此了解不多。
錯誤LogCat如下。
06-19 23:26:03.007: E/GCMRegistrar(29350): internal error: retry receiver class not set yet
06-19 23:26:03.071: E/URL(29350): > http://some.com/gcm/register.php
06-19 23:26:04.049: E/AndroidRuntime(29350): FATAL EXCEPTION: IntentService[GCMIntentService-950252240713-2]
06-19 23:26:04.049: E/AndroidRuntime(29350): java.lang.NullPointerException
06-19 23:26:04.049: E/AndroidRuntime(29350): at com.package.name.GCMIntentService.generateNotification(GCMIntentService.java:90)
06-19 23:26:04.049: E/AndroidRuntime(29350): at com.package.name.GCMIntentService.onMessage(GCMIntentService.java:48)
06-19 23:26:04.049: E/AndroidRuntime(29350): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
06-19 23:26:04.049: E/AndroidRuntime(29350): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
06-19 23:26:04.049: E/AndroidRuntime(29350): at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 23:26:04.049: E/AndroidRuntime(29350): at android.os.Looper.loop(Looper.java:154)
06-19 23:26:04.049: E/AndroidRuntime(29350): at android.os.HandlerThread.run(HandlerThread.java:65)
06-19 23:26:05.056: E/UnRegister Receiver Error(29350): > Receiver not registered: com.google.android.gcm.GCMBroadcastReceiver@413d8ab8
根據LogCat,這行是GCMIntent在創建錯誤:
String[] separated = mmessage.split("::");
String epurl = separated[2];
String message = separated[1];
String ntitle = separated[0];
我認為只有在這些字符串中包含“ ::”的情況下,才能通過轉換這些字符串來解決該問題,您能幫幫我嗎?
如果在指定的行上收到NullPointerException
,則唯一可能的解釋是mmessage
為null。
如果問題是mmessage
字符串沒有足夠的"::"
分隔符,則該異常應為ArrayIndexOutOfBoundsException
並且該異常應在其他一行中。
一個簡單的解決方案是檢查mmessage
是否為空,如果不執行,則不執行該代碼序列。 但是,我希望它為null的事實表明代碼中其他地方存在更大的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.