Не удается получить данные из метода или в других действиях в приложении для Android - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь сохранить данные от пользователя, который входит в приложение, в классе, чтобы я мог использовать все его данные во всех действиях.

Я выполнил несколько руководств по сериализации, но яне может заставить его работать.

Эта функция вызывает объект пользователя из моего API:

public void GetGame(String UID){
    String url = "https://worldapi.azurewebsites.net/api/homeracer/user/"+UID;
    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,

            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("tag", "jsonresponse" + response.toString());
                    try {
                        //String name = response.getString("userName");
                        currentUser.setUserId(response.getInt("userId"));
                        currentUser.setStartLat(response.getInt("startLat"));
                        currentUser.setStartLong(response.getDouble("startLong"));
                        currentUser.setEndLat(response.getDouble("endLat"));
                        currentUser.setEndLong(response.getDouble("endLong"));
                        currentUser.setUsername(response.getString("userName"));

                        startLong.setText(String.valueOf(currentUser.getStartLong()));
                        userName.setText(currentUser.getUsername());

                        //Intent sendObj = new Intent(Homescreen.this, Homescreen.class);
                        bundle = new Bundle();
                        bundle.putSerializable("userInfo", currentUser);
                        //sendObj.putExtras(bundle);
                        //startActivity(sendObj);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("error", error.toString());
                }
            }
    );
    jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
            10000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    //mRequestQueue.add(jsonObjectRequest);
    Volley.newRequestQueue(this).add(jsonObjectRequest);
}

Теперь, когда я пытаюсь получить имя пользователя или любые другие данные из моего текущего пользователя где угодно, кромев методе «onResponse».Поле не заполнено.

Итак, мой вопрос: как мне установить объект currentUser, чтобы я мог использовать все его поля в своей деятельности и также отправлять его другим активам.Я пробовал с разделяемыми настройками, и это сработало, но я читал где-то, что не идеально.

Класс UserData:

public class UserData implements Serializable {
  int UserId;
  double EndLat, EndLong, StartLat, StartLong;
  String Username;
  /*public Userdata(){

     }

  public Userdata(String username, double endLat, double endLong, double startLat
                             ,double startLong, int userId){
             this.Username = username;
             this.UserId = userId;
             this.StartLat = startLat;
             this.StartLong = startLong;
             this.EndLat = endLat;
             this.EndLong = endLong;

     }*/

  public void setUserId(int _userId) {
    this.UserId = _userId;
  }

  public int getUserId() {
    return UserId;
  }

  public void setEndLat(double _endLat) {
    this.EndLat = _endLat;
  }

  public double getEndLat() {
    return EndLat;
  }

  public void setStartLat(double _startLat) {
    this.StartLat = _startLat;
  }

  public double getStartLat() {
    return StartLat;
  }

  public void setEndLong(double _endLong) {
    this.EndLong = _endLong;
  }

  public double getEndLong() {
    return EndLong;
  }

  public void setStartLong(double _startLong) {
    this.StartLong = _startLong;
  }

  public double getStartLong() {
    return StartLong;
  }

  public void setUsername(String username) {
    this.Username = username;
  }

  public String getUsername() {
    return Username;
  }
}

1 Ответ

0 голосов
/ 15 декабря 2018

В Android вы можете легко передавать объект по всей Деятельности, реализуя интерфейс Parcelable.

Шаги:

  • Ваш класс должен реализовать интерфейс Parcelable.
  • Создайте Intent, нацеленный на Activity, по которому вы хотите перемещаться, и передавайте свой объект, используя метод putExtra().
  • Получите ваш объект из нового Activity.

Сильфон - это ваш UserData класс, реализующий Parcelable.Android Studio поможет вам выполнить эту задачу довольно легко.

public class UserData implements Parcelable {
    private int UserId;
    private double EndLat, EndLong, StartLat, StartLong;
    private String Username;

    public void setUserId(int _userId) {
        this.UserId = _userId;
    }

    public int getUserId() {
        return UserId;
    }

    public void setEndLat(double _endLat) {
        this.EndLat = _endLat;
    }

    public double getEndLat() {
        return EndLat;
    }

    public void setStartLat(double _startLat) {
        this.StartLat = _startLat;
    }

    public double getStartLat() {
        return StartLat;
    }

    public void setEndLong(double _endLong) {
        this.EndLong = _endLong;
    }

    public double getEndLong() {
        return EndLong;
    }

    public void setStartLong(double _startLong) {
        this.StartLong = _startLong;
    }

    public double getStartLong() {
        return StartLong;
    }

    public void setUsername(String username) {
        this.Username = username;
    }

    public String getUsername() {
        return Username;
    }

    // Parcelable implementation bellow this line

    protected UserData(Parcel in) {
        UserId = in.readInt();
        EndLat = in.readDouble();
        EndLong = in.readDouble();
        StartLat = in.readDouble();
        StartLong = in.readDouble();
        Username = in.readString();
    }

    public static final Creator<UserData> CREATOR = new Creator<UserData>() {
        @Override
        public UserData createFromParcel(Parcel in) {
            return new UserData(in);
        }

        @Override
        public UserData[] newArray(int size) {
            return new UserData[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(UserId);
        parcel.writeDouble(EndLat);
        parcel.writeDouble(EndLong);
        parcel.writeDouble(StartLat);
        parcel.writeDouble(StartLong);
        parcel.writeString(Username);
    }
}

Создайте Intent:

Intent intent = new Intent(context/*your activity*/, TargetActivity.class);

Теперь передайте объект намерению.intent.putExtra("your_key",yourObject); Начните свою деятельность startActivity(intent).

Наконец из TargetActivity получите объект, который был передан сюда из Intent.

UserData yourObject = getIntent().getParcelableExtra("your_key");

Вот и все!

...