2015-03-25 15 views
7

Tôi đã không hài lòng với điều này trong một vài ngày nay. Không thể làm đúng. Android studio sẽ không cho phép tôi biên dịch nó với lỗi này. Vì vậy, tôi có ứng dụng này, nơi tôi có hai tab và hai mảnh. Một mảnh được gọi là mới, và mảnh đó lấy json. Nhưng tôi không thể làm điều đó đúng cách. Tôi đã tải lên một hình ảnh về lỗi như thế nào và các tệp lớp. bạn có thể vui lòng giúp tôi không?Tại sao JsonObjectRequest của tôi không hoạt động?

Lỗi: "Không thể giải quyết constructor JsonObjectRequest (int, java.lang.String, null .......)

The error

new_fragment.java

public class new_fragment extends Fragment { 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    private String mParam1; 
    private String mParam2; 
    private VolleySingleton volleySingleton; 
    private ImageLoader imageLoader; 
    private RequestQueue requestQueue; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() !=null){ 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
     volleySingleton = VolleySingleton.getsInstance(); 
     requestQueue = volleySingleton.getRequestQueue(); 
     RequestQueue requestQueue = VolleySingleton.getsInstance().getRequestQueue(); 
     JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,"http://10.0.8.152/json/new.json",null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         System.out.println(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 
     requestQueue.add(request); 
    } 

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedIntanceState) { 
     setHasOptionsMenu(true); 
     View layout = inflater.inflate(R.layout.new_fragment, container, false); 
     return layout; 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     // TODO Auto-generated method stub 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.ref_menu, menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // handle item selection 
     switch (item.getItemId()) { 
      case R.id.refreshico: 
       // do s.th. 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

} 

VolleySingleton

public class VolleySingleton { 
    private static VolleySingleton sInstance = null; 
    private ImageLoader mImageLoader; 
    private RequestQueue mRequestQueue; 
    private VolleySingleton(){ 
     mRequestQueue = Volley.newRequestQueue(appClass.getAppContext()); 
     mImageLoader = new ImageLoader(mRequestQueue,new ImageLoader.ImageCache() { 
      private LruCache<String, Bitmap> cache = new LruCache<>((int)(Runtime.getRuntime().maxMemory()/1024)/8); 

      @Override 
      public Bitmap getBitmap(String url) { 
       return cache.get(url); 
      } 

      @Override 
      public void putBitmap(String url, Bitmap bitmap) { 
       cache.put(url, bitmap); 
      } 
     }); 
    } 

    public static VolleySingleton getsInstance(){ 
     if(sInstance==null){ 
      sInstance = new VolleySingleton(); 
     } 
     return sInstance; 
    } 

    public RequestQueue getRequestQueue(){ 
     return mRequestQueue; 
    } 
    public ImageLoader getImageLoader(){ 
     return mImageLoader; 
    } 


} 
+1

Tại sao bạn chưa cho chúng tôi biết thông báo lỗi nói gì? – immibis

+0

Tôi nghĩ rằng tham số JsonObjectRequest() không phải là matcing với tham số đã nhập của bạn. Vui lòng kiểm tra tham số. –

Trả lời

24

truyền (Chuỗi) null

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,"http://10.0.8.152/json/new.json",(String)null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         System.out.println(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 
9

new JsonObjectRequest mất 3 Parameter như String requestBody

cast null to String

hoặc bạn có thể làm cho một chuỗi rỗng như String rBody = null; và sau đó vượt qua rBody như Parameter 3rd

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, 
       "http://10.0.8.152/json/new.json", (String) null, // here 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         System.out.println(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 
requestQueue.add(request); 
+0

@rogertthatcode Tôi có cùng một vấn đề. Và giải pháp u được giải quyết. Tại sao chúng ta nên cho như thế này? Bạn có thể xin giải thích. Và/Hoặc tại sao chúng ta cần phải truyền đến String? –

+0

@KarthikeyanVe tôi đã tìm thấy [bài đăng này] (http://stackoverflow.com/questions/315846/why-null-cast) hữu ích về vấn đề này. Nó nói về hàm 'varargs'. Tôi sẽ làm một số tìm kiếm nhiều hơn cũng –

3

Vâng, tôi thấy tình hình, và nó vui vẻ vì lỗi của bạn nói, hàm tạo không tồn tại.

Nếu bạn đang sử dụng JsonObjectRequest như mặc định, và bạn muốn tiêu thụ một phương pháp Nhận, bạn không cần phải gửi tham số null, bạn chỉ nên gửi về theo cách này:

Thay đổi này:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,"http://10.0.8.152/json/new.json",null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        System.out.println(response); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }); 
    requestQueue.add(request); 

đối với điều này:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,"http://10.0.8.152/json/new.json", 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        System.out.println(response); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }); 
    requestQueue.add(request); 

Như bạn thấy, tôi chỉ cần loại bỏ các tham số cho JSONObject, bởi vì phương pháp này là Nhận, và có một constructor thats chấp nhận thứ lúc bạn không gửi JsonObject.

Một giải pháp khác là tạo JsonObjectRequest của riêng bạn và tùy chỉnh nó để chấp nhận loại giá trị đó.

Trân trọng.

+0

Tôi loại bỏ null và nó đã làm việc. Cảm ơn. Bạn không chắc chắn tại sao nhưng một hướng dẫn tôi đã đọc không có tham số thứ ba. –

0

Có một Constructor mơ hồ, cho giải quyết việc này, sử dụng mã này:

JSONObject jsonObject = null; 

    JsonObjectRequest request = new JsonObjectRequest(
      Request.Method.GET, "Your url", jsonObject, 
      new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 

       } 
      }, 
      new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
     }); 
1

Đối với tất cả mọi người đang cố gắng để thực hiện này ngay bây giờ: Google thay đổi các nhà xây dựng jsonObjectRequest: bây giờ bạn không của đèn theo yêu cầu gõ nữa thay vào đó, bạn cung cấp trước tiên url và sau đó là tham số thứ hai nếu bạn muốn nhận yêu cầu. ví dụ:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.aaa.com/getJSON/dummyMeldung.json", null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         try { 
          JSONArray jsonArray = response.getJSONArray("meldung"); 
          for (int i = 0; i <= jsonArray.length(); i++) { 
           JSONObject meldung = jsonArray.getJSONObject(i); 
           String comment = meldung.getString("comment"); 
           Log.d("ausgabe", comment); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 
0

Sự cố liên quan đến phiên bản bóng chuyền. Trên bản dựng của bạn.tệp ứng dụng gradle bạn cần có

dependencies { 
...... 
compile 'com.mcxiaoke.volley:library:1.0.0' 
..... 
} 
Các vấn đề liên quan