我可以在主线程中制作Json Volley请求吗?

时间:2015-07-08 08:34:53

标签: android json multithreading

我需要创建一个Json请求并根据其响应设置UI,因此最好在同一个线程中的onCreate中进行。

谈到RequestFuture,我不能依赖它来使用它,或者我不知道如何。

RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest request = new JsonObjectRequest(URL, null, future, future);
requestQueue.add(request);

try {
  JSONObject response = future.get();
  count = response.getIn("int");
} catch (InterruptedException e) {
} catch (ExecutionException e) {
}catch (JSONException e) {
            Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
        }

我尝试了这个,但它不起作用。

如果有人知道pls显示了如何从JSONObject获取数据的示例,并且不会做任何事情,而是使用该值来设置一些视图。

3 个答案:

答案 0 :(得分:1)

因为你的代码中有getActivity(),我打赌你是一个片段。 在UI线程上做一些你可以调用这样的东西

    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // your UI-related code goes here    
        }
    });

答案 1 :(得分:0)

使用Volley,成功时会有响应的监听器,而当服务器有错误代码(500,401)的响应时,会有错误监听器。 因此,您可以像以下代码行一样创建JSONObjectRequest:

    JSONObjectRequest jsObjRequest = new JsonArrayRequest
            (REQUEST_URL, new Response.Listener<JSONObjectRequest>() {

                @Override
                public void onResponse(JSONObjectRequest response) {
                    // this code will be executed when response comes and you can set your views, the way is depending where you are (fragment, activity, etc), you can do runOnUiThread
                    Log.d("Hello", "You can do whatever you want wen data is goten");
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("Error","You can show an error dialog here ");
                }
            });

您必须将上面创建的对象添加到HTTQueue中,并且它将在此时执行。希望它有所帮助!

答案 2 :(得分:0)

如果你正在使用凌空,那么你可以使用听众。您也可以参考此https://developer.android.com/training/volley/simple.html。在onResponse或onError中,您可以进行所需的UI更改。

JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {

  @Override
  public void onResponse(JSONArray response) {


  }
}, new Response.ErrorListener() {

  @Override
  public void onErrorResponse(VolleyError error) {


    }

  }
});