Я пытаюсь разработать приложение webview, которое использует JSinterface для получения user_id. я пытаюсь отправить два значения на свой сервер, user_id и токен FCM, onpause (). я получаю и сохраняю токен fcm внутри моего onCreate () вот так.
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "Failed", task.getException());
return;
}
String token = task.getResult().getToken();
SharedPreferences sharedPreferences
= getSharedPreferences("info",
MODE_PRIVATE);
SharedPreferences.Editor myEdit
= sharedPreferences.edit();
myEdit.putString("token",
token);
myEdit.commit();
Log.i("FCM", "Current token=" + token);
}
});
я получаю идентификатор пользователя с этим классом.
public class JsInterface {
private Context mcontext;
public JsInterface(Context c) {
this.mcontext = c;
}
@JavascriptInterface
public void getid(String userid){
int id;
try {
id = Integer.parseInt(userid);
}
catch (NumberFormatException e)
{
id = -1;
}
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mcontext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("userid", id);
editor.commit();
}
public int LoadId(){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mcontext);
int userid = sharedPreferences.getInt("userid", -1);
return userid;
}}
Что я пробовал относительно отправка значений на сервер:
class AsyncT extends AsyncTask<Void,Void,Void> {
@Override
protected Void doInBackground(Void...params) {
try {
URL url = new URL("Myurl"); //Enter URL here
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Content-Type", "application/json");
httpURLConnection.connect();
SharedPreferences sh
= getSharedPreferences("info",MODE_APPEND);
String token = sh.getString("token", "");
int id = sh.getInt("userid", -1);
JSONObject jsonObject = new JSONObject();
DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
wr.writeBytes(jsonObject.toString());
wr.flush();
wr.close();
Log.i("Token", "Current token=" + token); //the logs dont have the correct values
Log.i("id", "Current id=" + id);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPause()
{
AsyncT asyncT = new AsyncT();
asyncT.execute();
super.onPause();
}
У меня вообще нет опыта работы с sharedPrefs, и я не могу понять контекстную часть JSinteface, поэтому я думаю, что это не работает.