2015-07-20 2 views
4

У меня есть эта проблема, когда я следующийVolley - не может решить Конструктор «JSONObjectRequest

http://www.androidhive.info/2014/08/android-building-free-wallpapers-app-part-2/

и пришел к точке, где я добавить заставку и ловлю залп Запрос

. код учебник говорит, чтобы использовать, когда делает JSONObjectRequest является

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url, null, new Response.Listener<JSONObject>() 

но когда я печатаю, что из него просит меня импортировать Volley л library, который затем изменяет его на

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() 

Выполнение этой процедуры при возникновении ошибки не может решить конструктор.

код у меня в SplashActivity.java является:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Window; 
import android.widget.Toast; 

import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

public class SplashActivity extends Activity { 
    private static final String TAG = SplashActivity.class.getSimpleName(); 
    private static final String TAG_FEED = "feed", TAG_ENTRY = "entry", 
      TAG_GPHOTO_ID = "gphoto$id", TAG_T = "$t", 
      TAG_ALBUM_TITLE = "title"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
    getActionBar().hide(); 
    setContentView(R.layout.activity_splash); 

    // Picasa request to get list of albums 
    String url = AppConst.URL_PICASA_ALBUMS 
      .replace("_PICASA_USER_", AppController.getInstance() 
        .getPrefManager().getGoogleUserName()); 

    Log.d(TAG, "Albums request url: " + url); 

    // Preparing volley's json object request 

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url, 
      null, new Response.Listener<JSONObject>() { 

     @Override 
     public void onResponse(JSONObject response) { 
      Log.d(TAG, "Albums Response: " + response.toString()); 
      List<Category> albums = new ArrayList<Category>(); 
      try { 
       // Parsing the json response 
       JSONArray entry = response.getJSONObject(TAG_FEED) 
         .getJSONArray(TAG_ENTRY); 

       // loop through albums nodes and add them to album 
       // list 
       for (int i = 0; i < entry.length(); i++) { 
        JSONObject albumObj = (JSONObject) entry.get(i); 
        // album id 
        String albumId = albumObj.getJSONObject(
          TAG_GPHOTO_ID).getString(TAG_T); 

        // album title 
        String albumTitle = albumObj.getJSONObject(
          TAG_ALBUM_TITLE).getString(TAG_T); 

        Category album = new Category(); 
        album.setId(albumId); 
        album.setTitle(albumTitle); 

        // add album to list 
        albums.add(album); 

        Log.d(TAG, "Album Id: " + albumId 
          + ", Album Title: " + albumTitle); 
       } 

       // Store albums in shared pref 
       AppController.getInstance().getPrefManager() 
         .storeCategories(albums); 

       // String the main activity 
       Intent intent = new Intent(getApplicationContext(), 
         MainActivity.class); 
       startActivity(intent); 
       // closing spalsh activity 
       finish(); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(getApplicationContext(), 
         getString(R.string.msg_unknown_error), 
         Toast.LENGTH_LONG).show(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Volley Error: " + error.getMessage()); 

      // show error toast 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.splash_error), 
        Toast.LENGTH_LONG).show(); 

      // Unable to fetch albums 
      // check for existing Albums data in Shared Preferences 
      if (AppController.getInstance().getPrefManager() 
        .getCategories() != null && AppController.getInstance().getPrefManager() 
        .getCategories().size() > 0) { 
       // String the main activity 
       Intent intent = new Intent(getApplicationContext(), 
         MainActivity.class); 
       startActivity(intent); 
       // closing spalsh activity 
       finish(); 
      } else { 
       // Albums data not present in the shared preferences 
       // Launch settings activity, so that user can modify 
       // the settings 

       Intent i = new Intent(SplashActivity.this, 
         SettingsActivity.class); 
       // clear all the activities 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
         | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
       startActivity(i); 
      } 

     } 
    }); 

    // disable the cache for this request, so that it always fetches updated 
    // json 
    jsonObjReq.setShouldCache(false); 

    // Making the request 
    AppController.getInstance().addToRequestQueue(jsonObjReq); 

} 

} 

Я не уверен, что нужно сделать для того, чтобы исправить это?

ответ

0

Параметры в вашем конструкторе для запроса неверны, поэтому вы столкнулись с проблемой. Правильный код для создания JsonObjectRequest является

JsonObjectRequest request = new JsonObjectRequest(Method.GET, url, null, new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject arg0) { 
       // TODO Auto-generated method stub 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
+1

Спасибо за это, но когда я набираю его точно так же, как у вас есть, Android Studio выделяет «метод» и просит меня импортировать com.volley.android.method.Request. Как только я это сделаю, он меняет Method.GET на Request.Method.GET? Тогда ошибки из всего блока кода – x10sion

+0

Нет проблем. Request.Method.GET и Method.GET оба означают то же самое –

+0

, вы также можете использовать 0 вместо Method.GET, но его не рекомендуется использовать –

28

Транслируйте нулевое значение как (String) нуль

Для например: -

JsonObjectRequest request = new JsonObjectRequest(JsonRequest.Method.POST, url, (String)null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response){ 
       pDialog.hide(); 

       Log.d("Reponse", response.toString()); 

       Toast.makeText(getApplicationContext(), response.optString("name"), Toast.LENGTH_LONG).show(); 
      } 

     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       volleyError.printStackTrace(); 

       Log.d("Error = ", volleyError.toString()); 

       pDialog.hide(); 
      } 
     }){ 
      @Override 
      protected Map<String, String> getParams(){ 
       return params; 
      }; 
     } 
2

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

compile 'com.mcxiaoke.volley:library:1.0.0' 

в Gradle зависимости. Это сработало для меня, когда у меня такая же проблема.

Смежные вопросы