void run()中onResponse变量为null

时间:2017-03-03 12:07:41

标签: android android-studio androidhttpclient

我想在无效运行中获得颜色值,我该怎么做?举个例子? 那里的颜色是空的。

   public void onResponse(Call call, final Response response) throws IOException {
        String color = response.body().string();
        Profile.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                setTheme(color); //color is null here.
            }
        }
    }

运行中的颜色为null() 完整代码:

   protected void onCreate(Bundle savedInstanceState) {

    this.context = getApplicationContext();
    OkHttpClient client = new OkHttpClient();
    okhttp3.Request request = new okhttp3.Request.Builder()
            .url("http://ip/color.php")
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }
        @Override
        public void onResponse(Call call, final Response response) throws IOException {
            String color = response.body().string();
            Profile.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    setTheme(color);
                }
            }
        }
    });...

2 个答案:

答案 0 :(得分:1)

如果它表示从内部类中访问变量颜色, 将变量颜色设为全局。 在onCreate之外声明它。

或者让它成为最终

final String color = response.body().string();

答案 1 :(得分:1)

首先,您的代码不应该编译,因为您无法访问" closure"中的非最终变量。 因此,您需要的唯一变化是

final String color = response.body().string();
Profile.this.runOnUiThread(new Runnable() {
     @Override
     public void run() {
          setTheme(color);
     }
}