获取空 Volley 参考
Get null Volley reference
我在 logcat 中的空引用上收到 Volley addId.add(request) 在发布了填充了 gcm regID 的字符串后请问这里有什么问题?
我发布的布尔值也是真的吗?我的意思是 getRegId();仅适用于第一个 运行?
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;
}
}
=========================================== ======================
您没有在任何地方初始化 addId
对象。你不应该做 RequestQueue addId = new RequestQueue();
而不是 RequestQueue addId;
吗?
添加这一行,
addId = new RequestQueue();
这一行之前
addId.add(request);
您没有初始化 RequestQueue 对象。
我在 logcat 中的空引用上收到 Volley addId.add(request) 在发布了填充了 gcm regID 的字符串后请问这里有什么问题? 我发布的布尔值也是真的吗?我的意思是 getRegId();仅适用于第一个 运行?
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;
}
}
=========================================== ======================
您没有在任何地方初始化 addId
对象。你不应该做 RequestQueue addId = new RequestQueue();
而不是 RequestQueue addId;
吗?
添加这一行,
addId = new RequestQueue();
这一行之前
addId.add(request);
您没有初始化 RequestQueue 对象。