运行 activity 两次(而不是一次)从 getter 获取值

Run activity twice (instead of once) to get value from getter

当点击图像(来自之前的 activity)时,我得到这个 activity(我传递 clientid)读取 JSONArray 并使用 setter 来设置尼克.

然后我使用 getter 做一个 textview setText。

问题是第一次没有设置昵称。当我返回到之前的 activity 并再次点击相同的图像时,才会设置昵称。 为什么没有显示第一次的昵称

(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;
    }
}

因为sendjsonrequest是异步调用

您需要更新 onResponse 方法本身中的 textView,如下所示

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