我试图制作GCM安卓应用,当我成功获得我的regID但我的设备无法在服务器上注册
这里有一些logcat消息:
05-13 19:38:42.275: W/System.err(22161): org.apache.http.conn.ConnectTimeoutException: Connect to .. timed out
05-13 19:38:42.275: W/System.err(22161): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
05-13 19:38:42.275: W/System.err(22161): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
05-13 19:38:42.275: W/System.err(22161): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-13 19:38:42.275: W/System.err(22161): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-13 19:38:42.275: W/System.err(22161): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
05-13 19:38:42.285: W/System.err(22161): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
05-13 19:38:42.285: W/System.err(22161): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
05-13 19:38:42.285: W/System.err(22161): at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:74)
05-13 19:38:42.285: W/System.err(22161): at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:91)
05-13 19:38:42.285: W/System.err(22161): at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:54)
05-13 19:38:42.285: W/System.err(22161): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
05-13 19:38:42.285: W/System.err(22161): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-13 19:38:42.285: W/System.err(22161): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-13 19:38:42.285: W/System.err(22161): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-13 19:38:42.290: W/System.err(22161): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-13 19:38:42.290: W/System.err(22161): at java.lang.Thread.run(Thread.java:856)
我使用此代码来区分我的计算机IP:
static final String APP_SERVER_URL = "https://192.168.1.102:80//gcmwebapp/insertuser.php";
这个IP无法通过我的手机访问,但当我将它放入我的coumputer浏览器时,我将其从CMD中取出 - > ipconfig ipv4。
这是关于注册的代码:
package com.prgguru.example;
import java.io.IOException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class MainActivity extends Activity {
ProgressDialog prgDialog;
RequestParams params = new RequestParams();
GoogleCloudMessaging gcmObj;
Context applicationContext;
String regId = "";
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
AsyncTask<Void, Void, String> createRegIdTask;
public static final String REG_ID = "regId";
public static final String EMAIL_ID = "eMailId";
EditText emailET;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
applicationContext = getApplicationContext();
emailET = (EditText) findViewById(R.id.email);
prgDialog = new ProgressDialog(this);
// Set Progress Dialog Text
prgDialog.setMessage("Please wait...");
// Set Cancelable as False
prgDialog.setCancelable(false);
SharedPreferences prefs = getSharedPreferences("UserDetails",
Context.MODE_PRIVATE);
String registrationId = prefs.getString(REG_ID, "");
if (!TextUtils.isEmpty(registrationId)) {
Intent i = new Intent(applicationContext, GreetingActivity.class);
i.putExtra("regId", registrationId);
startActivity(i);
finish();
}
}
// When Register Me button is clicked
public void RegisterUser(View view) {
String emailID = emailET.getText().toString();
if (!TextUtils.isEmpty(emailID) && Utility.validate(emailID)) {
// Check if Google Play Service is installed in Device
// Play services is needed to handle GCM stuffs
if (checkPlayServices()) {
// Register Device in GCM Server
registerInBackground(emailID);
}
}
// When Email is invalid
else {
Toast.makeText(applicationContext, "Please enter valid email",
Toast.LENGTH_LONG).show();
}
}
// AsyncTask to register Device in GCM Server
private void registerInBackground(final String emailID) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcmObj == null) {
gcmObj = GoogleCloudMessaging
.getInstance(applicationContext);
}
regId = gcmObj
.register(ApplicationConstants.GOOGLE_PROJ_ID);
msg = "Registration ID :" + regId;
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
@Override
protected void onPostExecute(String msg) {
if (!TextUtils.isEmpty(regId)) {
storeRegIdinSharedPref(applicationContext, regId, emailID);
Toast.makeText(
applicationContext,
"Registered with GCM Server successfully.\n\n"
+ msg, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(
applicationContext,
"Reg ID Creation Failed.\n\nEither you haven't enabled Internet or GCM server is busy right now. Make sure you enabled Internet and try registering again after some time."
+ msg, Toast.LENGTH_LONG).show();
}
}
}.execute(null, null, null);
}
// Store RegId and Email entered by User in SharedPref
private void storeRegIdinSharedPref(Context context, String regId,
String emailID) {
SharedPreferences prefs = getSharedPreferences("UserDetails",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(REG_ID, regId);
editor.putString(EMAIL_ID, emailID);
editor.commit();
storeRegIdinServer(regId, emailID);
}
// Share RegID and Email ID with GCM Server Application (Php)
private void storeRegIdinServer(String regId2, String emailID) {
prgDialog.show();
params.put("emailId", emailID);
params.put("regId", regId);
System.out.println("Email id = " + emailID + " Reg Id = " + regId);
// Make RESTful webservice call using AsyncHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
client.post(ApplicationConstants.APP_SERVER_URL, params,
new AsyncHttpResponseHandler() {
// When the response returned by REST has Http
// response code '200'
@Override
public void onSuccess(String response) {
// Hide Progress Dialog
prgDialog.hide();
if (prgDialog != null) {
prgDialog.dismiss();
}
Toast.makeText(applicationContext,
"Reg Id shared successfully with Web App ",
Toast.LENGTH_LONG).show();
Intent i = new Intent(applicationContext,
GreetingActivity.class);
i.putExtra("regId", regId);
startActivity(i);
finish();
}
// When the response returned by REST has Http
// response code other than '200' such as '404',
// '500' or '403' etc
@Override
public void onFailure(int statusCode, Throwable error,
String content) {
// Hide Progress Dialog
prgDialog.hide();
if (prgDialog != null) {
prgDialog.dismiss();
}
// When Http response code is '404'
if (statusCode == 404) {
Toast.makeText(applicationContext,
"Requested resource not found",
Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(applicationContext,
"Something went wrong at server end",
Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(
applicationContext,
"Unexpected Error occcured! [Most common Error: Device might "
+ "not be connected to Internet or remote server is not up and running], check for other errors as well",
Toast.LENGTH_LONG).show();
}
}
});
}
// Check if Google Playservices is installed in Device or not
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(this);
// When Play services not found in device
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
// Show Error dialog to install Play services
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Toast.makeText(
applicationContext,
"This device doesn't support Play services, App will not work normally",
Toast.LENGTH_LONG).show();
finish();
}
return false;
} else {
Toast.makeText(
applicationContext,
"This device supports Play services, App will work normally",
Toast.LENGTH_LONG).show();
}
return true;
}
// When Application is resumed, check for Play services support to make sure
// app will be running normally
@Override
protected void onResume() {
super.onResume();
checkPlayServices();
}
}
我尝试了许多提示并进行了大量搜索...请帮助我在这周内坚持使用
感谢
答案 0 :(得分:1)
希望,您使用的IP是本地系统(LAN),您应该使用外部网址或使用系统中的wifi热点并连接到设备并尝试。