Android:如何从JsonObjectRequest返回一个值?

时间:2015-06-07 14:34:29

标签: android networking asynchronous synchronous

我们说我有这个Dashboard.java:

public class DashboardActivity extends ActionBarActivity {

    private TextView login_response;
    private static String TAG = DashboardActivity.class.getSimpleName();

    final static String API_URL_ACCOUNT = "http://www.example.com/apiv2/account";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);

        login_response = (TextView) findViewById(R.id.login_response);

        Intent intent = getIntent();

        if(intent.hasExtra("TOKEN"))
        {
            String token = intent.getStringExtra("TOKEN");

            getShopName(token);

        }
        else
        {
        }

这是getShopName方法:

private void getShopName(String token) {
        JsonObjectRequest req = new JsonObjectRequest(API_URL_ACCOUNT + "?token=" + token, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            VolleyLog.v("Response:%n %s", response.toString(4));

                            JSONArray account = response.getJSONArray("account");
                            //Log.d(TAG, "Account: "+account.toString());

                            JSONObject shop = account.getJSONObject(0);
                            String name_shop = shop.getString("name_shop");


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error: ", error.getMessage());
            }
        });

        // add the request object to the queue to be executed
        VolleyController.getInstance().addToRequestQueue(req);

    }

我的目标是

if(intent.hasExtra("TOKEN"))
        {
            String token = intent.getStringExtra("TOKEN");

            String shop_name = getShopName(token);

        }

&#34; shop_name&#34;在变量中,在其他部分重用。

所以,我知道虚空并没有任何回报,但是,我尝试编辑这样的答案,但没有成功:

How can I return value from function onResponse of Volley?

谢谢

1 个答案:

答案 0 :(得分:1)

问题不在于从JsonObjectRequest返回值,而在于您尝试以同步方式执行异步操作。

以下是一个很好的解释:Asynchronous vs synchronous execution, what does it really mean?

关于你的具体问题:我建议using an AsyncTask for your network operation