2016-05-07 22 views
0

私のデータベースからすべての名前を取得し、gcmによってすべての登録済みの電話に送信したいと思います。私は私のアンドロイド側でエラーが発生しますは、PHPサーバから値を受け取りません

エラー

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference 
                     at reminder.com.org.remind.GCMPushReceiverService.onMessageReceived(GCMPushReceiverService.java:27) 

が、これは助けてくださいのvar_dump($メッセージ)

​​3210

の結果です。ありがとう。あなたは、Android/Java配列に単純にPHPの配列を取得することはできません

PHPサーバー・コードに

<?php 

    include('db_connect.php'); 
    DEFINE('GOOGLE_API_KEY','my_google_api_key'); 

     $db = new DB_CONNECT(); 
     $conn = $db->connect(); 

    $gcmRegids = array(); 
    $names = array(); 

    $sql = "SELECT * FROM Test"; 
    $result = $conn->query($sql); 
    while ($row = $result->fetch_assoc()) { 
     array_push($gcmRegids, $row['reg_id']); 
     array_push($names, $row['name']);   
    } 

    if(isset($gcmRegids)) { 
       $e = "ads"; 
     $message = array('message' => $names); 
       var_dump($message); 
     $pushStatus = sendPushNotification($gcmRegids,$message); 
    } 


    function sendPushNotification($reg_ids, $message) { 
     $url = 'https://android.googleapis.com/gcm/send'; 
     $fields = array(
      'registration_ids' => $reg_ids, 
      'data' => $message, 
     ); 

     $headers = array (
      'Authorization: key='. GOOGLE_API_KEY, 
      'Content-type: application/json' 
     ); 

     $ch = curl_init(); 

     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
     curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($fields)); 

     $result = curl_exec($ch); 
     if($result === false) { 
      die('Curl failed:'. curl_error($ch)); 
     } 

     curl_close($ch); 
     //echo $result; 
     return $result; 
    } 
?> 

array(1) { ["message"]=> array(3) { [0]=> string(5) "name1" [1]=> string(5) "name2" [2]=> string(5) "name3" } } 

Androidのコード

public class GCMPushReceiverService extends GcmListenerService { 
    public final static String s = "msg"; 
    ArrayList<String> arr = new ArrayList<String>(); 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
      if(data != null) { 
       arr = data.getStringArrayList("message"); 
       Log.d("Names:",arr.get(0)); 
      } 
    } 

    ..... 
} 
+0

'Log.d( "名前を:"、arr.getは(0))してみてください。arr'がnullの' 'ので、NullPointerExceptionができます。盲目的に記録しないでください。使用前にarrでnullを確認してください。 – greenapps

+0

@reenapps知っています。しかし、なぜ? – user2211678

+0

私はarraylistが既に初期化していると思う...だからヌル? – Mohit

答えて

1

..あなたはそれを変換する必要がありますが...あなたを変更しようPHPスクリプトとして..

$message = array('message' => json_encode($names)); 

あなたのPHP配列($名前)をjsonに変換します。それ..に

 String message = data.getString("message"); 

     Log.e(TAG, "Message: " + message); 

     now convert it into JsonArray as.. 

     JsonArray array = new JsonArray(message); 

は今、ループとしてアンドロイドでJSONを取得し、PHPの配列名の内容を取得するよりも、 。

0

ここでは間違っていると思います。

変更あなたのように以下のコードとは再び

if (isset($gcmRegids) && count($gcmRegids) > 0) { 
    $e = "ads"; 
    $message = array('message' => $names); 
    var_dump($message); 
    foreach ($gcmRegids as $gcmid) { 
     $pushStatus = sendPushNotification($gcmid, $message); 
    } 
} 
関連する問題