2017-04-26 76 views
2

我想从BDDRequest类获取变量“response”,以在MainActivity类的ListView中使用它,我该怎么办?从onResponse获取变量

public class BDDRequest implements Serializable { 
    private final long serialVersionUID = 1L; 

    static private Activity activity; 
    public String req; 
    public BDDRequest(){} 


    public static void GetRequest(final Context t, UserEmployeeInfo User) { 

     activity = (Activity) t; 


     RequestQueue queue = Volley.newRequestQueue(t); 
     ParamsSend params = new ParamsSend(); 

     params.setUser(User); 
     ParserJson<ParamsSend> pj = new ParserJson<>(params); 


     String strJson; 
     try { 
      strJson = pj.writeJSON(); 

     } catch (JsonProcessingException e) { 
      strJson = "null"; 
     } 
     final String data = strJson; 
     String REST_API_URL = "http://212.227.53.116:8080/WSmartgroom/rest/perso/request"; 
     Log.d("lol", strJson); 
     StringRequest myReq = new StringRequest(Request.Method.PUT, 
       REST_API_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d("reponse:", response); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.d("That didn't work!", "Error"); 
      } 
     }) { 
      @Override 
      public String getBodyContentType() { 
       return "application/json"; 
      } 
      @Override 
      public byte[] getBody() throws AuthFailureError { 
       return data.getBytes(); 
      } 
     }; 
     queue.add(myReq); 
    } 
} 
+1

问题尚不清楚。你想从GetRequest方法返回响应吗? – Krish

+0

不完全是,我希望我的变量“字符串请求”获取我的变量“响应”中的值,以便在另一个类中使用它 –

+0

您可以使用接口实现回调函数。然后和你的班级一起使用。 – Krish

回答

2

使用它的接口,

import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 

import com.android.volley.AuthFailureError; 
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; 

import java.io.Serializable; 

public class BDDRequest implements Serializable { 
    private final long serialVersionUID = 1L; 

    static private Activity activity; 
    public String req; 

    public BDDRequest() { 
    } 


    public static void GetRequest(final Context t, UserEmployeeInfo User, final Callback callback) { 

     activity = (Activity) t; 


     RequestQueue queue = Volley.newRequestQueue(t); 
     ParamsSend params = new ParamsSend(); 

     params.setUser(User); 
     ParserJson<ParamsSend> pj = new ParserJson<>(params); 


     String strJson; 
     try { 
      strJson = pj.writeJSON(); 

     } catch (JsonProcessingException e) { 
      strJson = "null"; 
     } 
     final String data = strJson; 
     String REST_API_URL = "http://212.227.53.116:8080/WSmartgroom/rest/perso/request"; 
     Log.d("lol", strJson); 
     StringRequest myReq = new StringRequest(Request.Method.PUT, 
       REST_API_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d("reponse:", response); 
         callback.onSuccess(response); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.d("That didn't work!", "Error"); 
       callback.onError(); 
      } 
     }) { 
      @Override 
      public String getBodyContentType() { 
       return "application/json"; 
      } 

      @Override 
      public byte[] getBody() throws AuthFailureError { 
       return data.getBytes(); 
      } 
     }; 
     queue.add(myReq); 
    } 


    public interface Callback { 
     void onSuccess(String response); 
     void onError(); 
    } 

} 

和落实科学类的接口。

使用这样,

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.widget.TextView; 

import com.example.BDDRequest.Callback; 

public class MainActivity extends FragmentActivity implements Callback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     BDDRequest.GetRequest(this, new UserEmployeeInfo(), this); 


    } 

    @Override 
    public void onSuccess(String response) { 
     // Bind the data to the listview 
    } 

    @Override 
    public void onError() { 
     //Show fallback message here 
    } 
} 
+0

非常好,非常感谢,我仍然有2个错误,我不能解决符号“常量”和“建设”可能需要一些包? –

+0

@VictorAttilaBreelle哦,对不起,这是我的示例项目,我已经更新了答案。 – Krish

+0

非常感谢Krish !!!! –

2

你声明了onResponse方法。在它内部,响应是一个参数。你为什么想要得到一个参数?问题不明确。

+0

我得到一个字符串从服务器,我想获得这个值在另一个类中使用它(把它放在一个列表视图),我的价值是响应变量...错了? –