无法更新成员变量

时间:2015-04-16 19:15:06

标签: java android

不知道行mResponseText = response.body().string();没有写成员变量。相反,它似乎是在本地创建和记录它。

任何想法为什么?我看得越多,我就越无能为力:(

public class Gateway {
    private static final String TAG = Gateway.class.getSimpleName();
    public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");
    private String mResponseText = "[{'comment' : 'fake' , 'psn_nickname' : 'fake', 'created':'now', 'parent_class':''}]";



    public Gateway (String url, String json,  final Context context) {

        if(isNetworkAvailable(context)) {
            //if network is available build request

            OkHttpClient client = new OkHttpClient();
           // RequestBody body = RequestBody.create(JSON, json);
            Request request = new Request.Builder()
                    .url(url)
                    //.post(body)
                    .build();

            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                //execute call
                @Override
                public void onFailure(Request request, IOException e) {
                    // if request failed
                    Toast.makeText(context, "request failed", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onResponse(Response response) throws IOException {
                    // if succeeded
                    if(response.isSuccessful()){
                        mResponseText = response.body().string();
                        Log.v(TAG, "SETTING RESPONSE");
                        // THIS LOGS PROPER JSON LOADED FROM NETWORK
                        Log.v(TAG, mResponseText);

                    } else {

                        //alertUserAboutError(context);
                        Toast.makeText(context, "Something wrong with response", Toast.LENGTH_LONG).show();
                    }
                }
            });
        } else {
            Toast.makeText(context, "Network is not available", Toast.LENGTH_LONG).show();
        }

    }

    public String getResponse () {
        Log.v(TAG, "GETTING RESPONSE");
        // THIS LOGS FAKE SAMPLE JSON --- WTF???
        Log.v(TAG, mResponseText);
        return mResponseText;
    }


    // check if network is available
    private boolean isNetworkAvailable(Context c) {
        ConnectivityManager manager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        boolean isAvailable = false;
        if (networkInfo != null && networkInfo.isConnected()) {
            isAvailable = true;
        }

        return isAvailable;
    }
    /*
    private void alertUserAboutError(Context c) {
        AlertDialogFragment dialog = new AlertDialogFragment();
        dialog.show(c.getFragmentManager(), "error_dialog");
    }
    */
}

以下是使用此类的代码

Gateway gateway = new Gateway(mCommentURL, "", this);
String mJsonData = gateway.getResponse();

编辑代码更新 - 已移除extends Activity

1 个答案:

答案 0 :(得分:2)

您过早地打电话给getResponse()。异步操作尚未完成,返回的值是您首先初始化的值,而不是Callback中写入的值。

将使用响应的代码放在Callback中,或者从回调中调用该代码。