У меня есть проект андроида, в котором я использую класс для отправки http-запросов с использованием библиотеки Volley. Это называется WebServicesAdapter
. Я использовал обратный вызов в нем, чтобы вернуть значение вызываемой активности, но это предотвращает запуск нового действия из-за некоторых проблем в контексте. Как я могу вернуть строку без использования обратного вызова?Вернуть строку из анонимного класса
Ниже приведен мой код. successcallback
- это обратный вызов, когда я хочу вместо этого вернуть строку.
public class WebServiceAdapter {
private static String BASE_URI = "http://192.168.42.94/getvoize/index.php";
private RequestQueue rQueue;
public String responseString;
public String status;
Context context;
public WebServiceAdapter(Context context){
this.context = context;
status = "new";
rQueue = Volley.newRequestQueue(context);
}
private WebServiceInterface wsi;
public void sendGetRequest(String page,Map<String,String> map, WebServiceInterface i){
wsi = i;
String query = "";
if(!map.isEmpty()){
for (Map.Entry<String, String> entry : map.entrySet())
{
query =query + entry.getKey()+"="+entry.getValue()+'&';
}
}
if(query.length() != 0)
query = query.substring(0,query.length()-1);
StringRequest sRequest = new StringRequest(Request.Method.GET,BASE_URI+page+"?"+query,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
wsi.successCallback(response,context);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
wsi.errorCallback("failed",context);
}
});
rQueue.add(sRequest);
}
private Map<String,String> parameter;
private Map<String,String> headers;
public void sendPostRequest(String page,Map<String,String> body,Map<String,String> header,WebServiceInterface i){
wsi = i;
parameter = body;
headers = header;
Log.d("place", "Inpost");
StringRequest myReq = new StringRequest(Request.Method.POST,
BASE_URI+page,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
wsi.successCallback(response, context);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
wsi.errorCallback("Failed", context);
}
}
) {
@Override
protected Map<String,String> getParams(){
Map<String,String> params = parameter;
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = headers;
return params;
}
};
rQueue.add(myReq);
}
Вы говорите о 'обратном вызове', но я не вижу использования' class Callback'. 'Я использовал обратный вызов в нем, чтобы вернуть значение вызываемой активности, но это предотвращает запуск новой активности из-за некоторых проблем в контексте'. Вы можете уточнить это. – greenapps
Я использую обратный вызов с использованием интерфейсов. используя 'wsi.successCallback (ответ, контекст);' – haseeb