2016-03-08 3 views
1

Я поставил эту Завис использовать залп и получить данные в формате JSON с этой уважаемой URL: -Not Getting StringRequest Ответ в залпа

**compile 'me.neavo:volley:2014.12.09'** 

после сдачи этого Not Getting StringRequest Ответ: -

если Я использую другие URLS, это прекрасно работает, но этот URL-адрес не дает мне ответа.

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

public class VolleyTest extends Activity { 
//MY URL where i had made Json data 
    public static final String MainUrl = "http://mycricket.net23.net/abcd.php"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     Log.d("method", "GETDATA"); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     StringRequest request = new StringRequest(Request.Method.GET, MainUrl, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
      // SHow LOG of JSON data  
      Log.d("ResponseVolley",response); 
      } 
     },new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }); 
     //.. Adding Request 
     requestQueue.add(request); 
     } 
} 
+0

попытайтесь преобразовать ответ в JsonObject и print.may, будет ли он работать –

+0

Вы не сказали нам, какую ошибку вы получите, если вообще делаете? Если он работает с другими ссылками, мы должны посмотреть ваш php-файл ... Кроме того, почему вы не используете Volley из репозитория Google? git clone https://android.googlesource.com/platform/frameworks/volley получите эту версию, перейдите в Android Studio> Создать> Модуль импорта и укажите путь к загруженной папке. Затем в app build.gradle добавьте компилируемый проект (': volley') к зависимостям – iBobb

+0

Я не получаю ответа, .. thats it –

ответ

0

Вы создаете в контексте методы нового RequestQueue, но вполне возможно, что когда-то метод возвращает, очередь запроса сборщика мусора.

Попробуйте сделать объект RequestQueue членом вашей деятельности и создать его только в том случае, если он по-прежнему равен нулю.

+0

извините, я не понимаю вас. что я должен изменить? –

+0

все работает хорошо, если я добавляю другой URL. –

+0

переместите эту строку: 'RequestQueue requestQueue = Volley.newRequestQueue (this);' чтобы быть под линией, где объявляется MainUrl, то есть делает requestQueue членом активности, а не переменной в методе. –

0

Ответ от вашего php - JSON. Она начинается с {не с [так что это JSONObject, а не JSONArray так ...

Просто следовать шаблону Singleton, создать класс вроде этого:

public class VolleySingleton { 
private static VolleySingleton sInstance = null; 
private RequestQueue mRequestQue; 

private VolleySingleton(){ 
mRequestQue = Volley.newRequestQueue(MyApplication.getAppContext()); 
} 

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

public RequestQueue getRequestQueue() { 
    return mRequestQue; 
} 

} 

затем в вашей Фрагмент/Активность создать ваш метод загрузки, где вы просто сделать запрос Volley и добавить его в очередь:

public void downloadMethod(String urlService, Response.Listener<JSONObject> successListener, Response.ErrorListener errorListener) { 
    //final List<Event> myEventsList = eventsList; 
    RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue(); // this is where we use the Singleton 
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest 
      (Request.Method.GET, urlService, null, successListener, errorListener); 


    requestQueue.add(jsonObjectRequest); 
    Log.d("VolleyDebug", "REQUEST QUE ADDED SUCCESSFULLY"); 


} 

Теперь создайте 2 слушателей ответа, где вы на самом деле обрабатывать ответ:

private Response.Listener<JSONObject > createMyReqSuccessListener() { 
    return new Response.Listener<JSONObject >() { 
     @Override 
     public void onResponse(JSONObject response) { 
      //handle JSON here 
     } 
    }; 
} 


private Response.ErrorListener createMyReqErrorListener() { 
    return new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(MyApplication.getAppContext(), "ERROR:" + error.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }; 
} 

И теперь использовать метод:

downloadMethod(yourURL, createMyReqSuccessListener(), createMyReqErrorListener()); 

EDIT:

Я забыл сказать вам о классе MyApplication, это очень полезно при получении контекста вокруг вашего приложения, так что вы могли бы а также создать его тоже:

public class MyApplication extends Application { 
private static Context context; 
//private static MyApplication sInstance; 

public void onCreate() { 
    super.onCreate(); 

    MyApplication.context = getApplicationContext(); 
} 

public static Context getAppContext() { 
    return MyApplication.context; 
} 

} 

НО, вы должны заявить об этом в своем манифесте <application> теге android:name=".MyApplication"

выглядит так:

<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:icon="@drawable/app_ico" 
    android:label="@string/app_name" 
+0

ohk Позвольте мне попробовать, что –

+0

Это немного отличается от вашей реализации, но шаблон Singleton - это хорошая практика, и слушатели ответов, которые вы создаете, делают код более понятным, и вы избегаете проблем. Я реагировал так, как вы делали это раньше, но иногда возникали задержки в получении ответа. С помощью этих отдельных слушателей ответа у меня нет проблем. Теперь, если вы новичок в JSON, прочитайте немного о том, как обращаться с JSON, хотя довольно легко – iBobb

+0

, когда я создаю новый класс для VolleySingleton ... mRequestQue = Volley.newRequestQueue (MyApplication.getAppContext()); получить ошибку здесь «MyApplication.getAppContext()» –

0

Может быть есть пробы. с вашим URL.

проверьте другой URL-адрес и повторите попытку.

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