2015-03-25 4 views
7

Я занимаюсь этим несколько дней. Не могу понять. Студия Android не позволит мне скомпилировать ее с этой ошибкой. Итак, у меня есть это приложение, где у меня есть две вкладки и два фрагмента. Один фрагмент называется новым, и этот фрагмент извлекает json. Но я не мог сделать это правильно. Я загрузил изображение, как выглядит ошибка, и файлы классов. Не могли бы вы помочь мне?Почему мой JsonObjectRequest не работает?

Ошибка: «Не удается разрешить конструктор JsonObjectRequest (INT, java.lang.String, нуль .......)

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

Почему вы не сказали нам, что говорит об ошибке? – immibis

+0

Я думаю, что параметр JsonObjectRequest() не совпадает с вашим введенным параметром. Проверьте параметр. –

ответ

24

литье (String) 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 занимает 3 параметр, как String requestBody

cast null to String

или вы можете сделать пустую строку, как String rBody = null;, а затем передать rBody в качестве 3-го параметра

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 У меня была та же проблема. И решение u задано. Почему мы должны так относиться? Не могли бы вы объяснить. И/Или почему нам нужно отбрасывать в String? –

+0

@ KarthikeyanVe Я нашел [этот пост] (http://stackoverflow.com/questions/315846/why-null-cast) полезный относительно того же. В нем говорится о функции «varargs». Я также сделаю поиск еще –

3

Ну, я вижу ситуацию, и это происходит потому, что, как говорит ваша ошибка, конструктор не существует.

Если вы используете JsonObjectRequest по умолчанию, и вы хотите, чтобы потреблять Получ, вы не должны послать нулевой параметр, вы просто должны отправить этот путь:

Изменить это:

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); 

Для этого:

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); 

Как вы можете видеть, я просто удалить параметр для JSONObject, так как метод Get, и есть конструктор то будет принимать тыс у вас не отправляйте JsonObject.

Другое решение - создать собственный JsonObjectRequest и настроить его для принятия таких значений.

С уважением.

+0

Я удалил null, и он сработал. Благодарю. Не знаю, почему, но учебник, который я читал, имеет значение null в качестве третьего параметра. –

0

Существует неоднозначный конструктор, для решения этой проблемы, используйте этот код:

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

Для все пытаемся реализовать это прямо сейчас: Google изменил конструктор jsonObjectRequest: теперь вы не шаха запроса печатает больше , вместо этого вы сначала указываете url, а затем null как второй параметр, если хотите получить запрос на получение. например:

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

Проблема, связанная с версией залпа. На вашей сборке.файл приложения gradle вы должны иметь

dependencies { 
...... 
compile 'com.mcxiaoke.volley:library:1.0.0' 
..... 
} 
Смежные вопросы