Отправка токена и идентификатора на сервер - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь разработать приложение 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, поэтому я думаю, что это не работает.

1 Ответ

0 голосов
/ 07 августа 2020

попробуйте создать один класс для обновления и получения значения из вашего общего предпочтения по умолчанию, это поможет вам избежать путаницы:

    public class sharedpref {
    
        private SharedPreferences mysharedpref;
    
        public sharedpref(Context cntx) { // pass context of activity you are using this
          
            mysharedpref = PreferenceManager.getDefaultSharedPreferences(cntx);
        }
    
        public void setuserid(String userid) {
            prefs.edit().putString("userid", userid).commit();
        }
     public  String getuserid(){
            String userid = prefs.getString("userid","");
            return  userid;
        }
      public void settoken(String token) {
            prefs.edit().putString("token", token).commit();
        }
     public  String gettoken(){
            String token = prefs.getString("token","");
            return  token;
        }
}

Теперь в любом действии просто позвоните:

private sharedpref sp = new sharedpref(this.getApplicationContext());
// then simply perform your operations

sp.settoken(value);
sp.getuserid();
...