2015-05-13 312 views
-1

我试图让GCM Android应用程序,当我得到我的RegID成功地,但我的设备无法在服务器上注册org.apache.http.conn.ConnectTimeoutException:连接到..超时错误

这里是一些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) 

我使用此代码difine我的电脑IP:

static final String APP_SERVER_URL = "https://192.168.1.102:80//gcmwebapp/insertuser.php"; 

这个IP没有从我的移动访问,但是当我把它放在我的coumputer浏览器我反应h,我把它从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(); 
    } 
} 

我试了很多技巧和搜查了很多......请任何帮助,我被困在这一周

THANKS

回答

1

希望,您使用的IP是本地系统(LAN),您应该使用外部URL或使用您的系统的WiFi热点并连接到设备并尝试。

+0

不适合我 –