2016-02-04 2 views
0

Я получаю Volley addId.add (запрос) по нулевой ссылке в logcat после публикации строки, заполненной gcm regID, что здесь не так, пожалуйста? также имеет значение boolean, что я написал верхний истинный? Я имею в виду getRegId(); будет работать только при первом запуске?Получить null Ссылка на Volley

public class MainActivity extends AppCompatActivity { 



    String projectNumber = "*********"; 
    GoogleCloudMessaging gcm; 
    String regId =""; 
    String TAG = "Register Service"; 
    RequestQueue addId; 
    String url = "***************"; 
    String version = BuildConfig.VERSION_NAME; 
    boolean firstRun = true; 
    double d = Double.parseDouble(version); 



    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     isNetworkConnected(); 

     SharedPreferences prefs = getSharedPreferences("PREFS_NAME", 0); 
     firstRun = prefs.getBoolean("FIRST_RUN", true); 




     if(firstRun){ 

      prefs = getSharedPreferences("PREFS_NAME", 0); 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putBoolean("FIRST_RUN",false); 
      editor.apply(); 
      getRegId(); 


    } 

........... 


    public void sendId() { 

     StringRequest request = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 


         Log.i("The registration", "success sent"); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

       Log.i("The registration", "error sent"); 


      } 
     }) { 


      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("gcmregid", regId); 

       return params; 
      } 


     }; 
     addId.add(request); 

    } 

    public void getRegId() { 
     new AsyncTask<Void, Void, String>() { 

      @Override 
      protected String doInBackground(Void... params) { 

       String msg = ""; 

       try { 
        if (gcm == null) { 
         InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); 
         regId = instanceID.getToken(projectNumber, GoogleCloudMessaging.INSTANCE_ID_SCOPE); 

         msg = "Device registration, registration ID=" + regId; 
         Log.i(TAG, msg); 
         if (regId.isEmpty()){ 
          instanceID = InstanceID.getInstance(getApplicationContext()); 
          regId = instanceID.getToken(projectNumber, GoogleCloudMessaging.INSTANCE_ID_SCOPE); 

         } 
        } 

       } catch (IOException e) { 
        e.printStackTrace(); 
        msg = "Error :" + e.getMessage(); 
       } 
       return msg; 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       sendId(); 
      } 
     }.execute(null, null, null); 

    } 

    private boolean isNetworkConnected() { 
       ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
       NetworkInfo ni = cm.getActiveNetworkInfo(); 
       if (ni == null) { 
        Toast.makeText(getApplicationContext(), "No Network", Toast.LENGTH_SHORT).show(); 
        return false; 
       } 
       return true; 
      } 



} 

=========================================== ========================

+0

см. Мой ответ ниже. –

ответ

0

Добавьте эту строку,

addId = new RequestQueue(); 

до этой линии

addId.add(request); 

Вы не инициализируется объект RequestQueue.

+0

Как насчет boolean - эти коды верны? – mohammed02

+0

Да, это будет работать только при первом запуске. –

+0

хороший улов сухас –

0

Вы не инициализируете addId Объект в любом месте. Разве вы не должны делать RequestQueue addId = new RequestQueue(); вместо RequestQueue addId;?

Смежные вопросы