2016-04-14 7 views
1

Ich habe eine Android App, die Beiträge zu "http://jont.byethost3.com/gcmtest/gcm.php?shareRegId=true". Nach dem Zugriff sendet die App einen ID-Schlüssel an das Skript und die PHP-Datei speichert es in einer Textdatei auf meinem Dateiserver. Ich habe die URL manuell in meinen Browser eingegeben und es wurde erfolgreich eine leere Textdatei generiert, weil ich keine POST-Daten erhalten habe. Wenn ich sie jedoch in meiner App teste, funktioniert sie nicht.Android App derzeit keine Details, um es zu url

ich AsyncHTTP verwenden rufen und die Daten wie diese

private void backgroundRegister(final String username){ 
    new AsyncTask<Void, Void, String>(){ 

     @Override 
     protected String doInBackground(Void... params) { 
      String msg = ""; 
      try{ 

       if(gcmObj==null){ 
        gcmObj = GoogleCloudMessaging.getInstance(getApplicationContext()); 
       } 
       registerID = gcmObj.register(AppConstants.PROJ_ID); 
       msg = "Registration ID : " + registerID; 
       Log.d("REGOID",registerID); 

      }catch(IOException e){ 
       Log.d("IOEXCEPTION",e.toString()); 
      } 
      return msg; 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      if(!TextUtils.isEmpty(registerID)){ 
       savetoSharedPrefs(getApplicationContext(),registerID,username); 
       Toast.makeText(getApplicationContext(),"Registered with GCM",Toast.LENGTH_LONG).show(); 
      }else{ 
       Toast.makeText(getApplicationContext(),"Registration failed",Toast.LENGTH_LONG).show(); 
      } 
     } 
    }.execute(null, null, null); 
} 

private void savetoSharedPrefs(Context context, String registerID,String userName){ 
    SharedPreferences prefs = getSharedPreferences("userDetails", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(regID, registerID); 
    editor.putString(userNAME, userName); 
    editor.commit(); 
    storeREG(); 
} 

//store in the file server (PHP) 
private void storeREG(){ 

    pg.show(); 
    params.put("regID", registerID); 
    //Make RESTful webservice call 

    AsyncHttpClient client = new AsyncHttpClient(); 
    client.post(AppConstants.SERVER_URL,params,new AsyncHttpResponseHandler(){ 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      pg.hide(); 
      if(pg!=null){ 
       pg.dismiss(); 
      } 
      Toast.makeText(getApplicationContext(),"ID sharing successful",Toast.LENGTH_LONG).show(); 
      Intent home = new Intent(getApplicationContext(),HomeActivity.class); 
      home.putExtra("regID",registerID); 
      Log.d("REGID",registerID); 
      startActivity(home); 
      finish(); 
     } 

     @Override 
     public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
      pg.hide(); 
      if(pg!=null){ 
       pg.dismiss(); 
      } 
      if(statusCode==404){ 
       Toast.makeText(getApplicationContext(),"Requested resource not found",Toast.LENGTH_LONG).show(); 
      }else if(statusCode==500){ 
       Toast.makeText(getApplicationContext(),"Something went wrong at the server",Toast.LENGTH_LONG).show(); 
      }else{ 
       Toast.makeText(getApplicationContext(),"Unexpected error occurred",Toast.LENGTH_LONG).show(); 
      } 
     } 


    }); 

} 

Die Daten, die ich nur Klartext übergeben wollen passieren. Ich hoffe jemand kann mir dabei helfen.

EDIT

Mein PHP-Skript

if(!empty($_GET["shareRegId"])) { 
    $gcmRegID = $_POST["regID"]; 
    //echo $gcmRegID; 
    file_put_contents("./GCMRegId.txt",$gcmRegID); 
    echo "Done!"; 
    exit; 
    } 

Mein Manifest für alle Fälle

<?xml version="1.0" encoding="utf-8"?> 

<!-- GCM Permissions - Start here --> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 


<permission android:name="com.example.amosang.pushtest.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 


<uses-permission android:name="com.example.amosang.pushtest.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<uses-permission android:name="android.permission.VIBRATE" /> 



<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".HomeActivity" 
     android:label="@string/title_activity_home" > 
    </activity> 

    <receiver 
     android:name=".GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 

     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <action android:name="com.example.amosang.pushtest" /> 
     </intent-filter> 
    </receiver> 

    <service android:name=".GCMNotificationIntentService" /> 
</application> 

UPDATE: Ich habe es geschafft diesen Code zu bekommen arbeiten lokal mein MAMP-Server verwenden, bleibt das Problem, wenn ich es auf diesem Host hochgeladen werden.

+0

Wie Sie den Parameter hier übergeben? Durch Anhängen an URL? –

+0

Sie leiten Daten an die URL weiter, indem Sie sie an die URL und per Post anhängen? Das ist das Problem, das ich denke –

+0

Hallo, danke für die Antwort. Ich habe meinen Code in der Frage bearbeitet. Ich gebe die Daten durch die Parameter neben der URL – JianYA

Antwort

0

Um Post zu übergeben params mit AsyncAndroidHttp Bibliothek Sie die mitgelieferte RequestParams Klasse verwenden können, und übergeben, die zu Ihrem Post API-Aufruf, ein wenig Demonstration dessen, was ich meine:

AsyncHttpClient client = new AsyncHttpClient(); 
RequestParams req = new RequestParams(); 
req.add("shareRegId","true"); 

client.post(AppConstants.SERVER_URL,req,new AsyncHttpResponseHandler(){ 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
     pg.hide(); 
     if(pg!=null){ 
      pg.dismiss(); 
     } 
     Toast.makeText(getApplicationContext(),"ID sharing successful",Toast.LENGTH_LONG).show(); 
     Intent home = new Intent(getApplicationContext(),HomeActivity.class); 
     home.putExtra("regID",registerID); 
     Log.d("REGID",registerID); 
     startActivity(home); 
     finish(); 
    } 

Dies wird Ihnen helfen Pass Post Params,

+0

Ich habe mein PHP-Skript hinzugefügt. Es sollte GET verwenden, um zu überprüfen, ob die shareRegId nicht leer ist, und dann vom POST die Daten holen. Bis jetzt scheint es die Website überhaupt nicht zu kontaktieren. – JianYA

+0

Das Problem ist, dass ich keine Ahnung habe, ob die client.post in der Lage ist, irgendwelche Informationen außerhalb der Textdatei zu senden, die auf der PHP-Seite erstellt wird. Im Moment alle meine Berechtigungen korrekt, aber keine Textdatei erzeugt wurde Ihren – JianYA

+0

eine Sache für eine Weile ändern 'Post' zu' get' und in PHP-Skript verwenden '_GET' $ sowohl die params zu bekommen und sehen, was passiert –