Выполните действие дважды (вместо одного), чтобы получить значение от получателя - PullRequest
0 голосов
/ 10 октября 2018

При нажатии на изображение (из предыдущего занятия) я попадаю в это задание (где я передаю клиенту), которое читает JSONArray и использую установщик, чтобы установить ник.

Затем я использую геттер длясделать textview setText.

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

(ps: я совсем новичок в Java / Android Studio)

package com.smartvibes.smartbeat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;

public class profileViewActivity extends AppCompatActivity {
    RequestQueue rs;
    String url, id, nick, age, city, mainpic, numpics, extrapic0, extrapic1, extrapic2, extrapic3, extrapic4, extrapic5;
    TextView profileIntro;
    static String pnick;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile_view);
        Bundle getProfileId = getIntent().getExtras();
        if (getProfileId == null) {
            return;
        }
        String profileid = getProfileId.getString("profileid");
        url = "https://www.smartvibes.be/profiles/api/profileview.php?id=" + profileid;
        rs = Volley.newRequestQueue(this);
        sendjsonrequest();
        profileIntro = (TextView) findViewById(R.id.profileIntro);
        profileIntro.setText(getPnick());
    }

    public void sendjsonrequest() {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    setPnick(response.getString("nick"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        rs.add(jsonObjectRequest);
    }

    public static void setPnick(String nick) {
        pnick = nick;
    }

    public static String getPnick(){
        return pnick;
    }
}

1 Ответ

0 голосов
/ 10 октября 2018

Поскольку sendjsonrequest является асинхронным вызовом

Вам необходимо обновить textView в onResponse Сам метод, как показано ниже

setPnick(response.getString("nick"));
profileIntro.setText(getPnick());
...