2017-04-26 77 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

我得到一個字符串從服務器,我想獲得這個值在另一個類中使用它(把它放在一個列表視圖),我的價值是響應變量...錯了? –