2016-02-28 76 views
1

我正在爲我的課程開發一個Android項目。使用volley Android Studio獲取JSON響應

我必須得到JsonObject來自兩個網站的回覆。

第一個是get_token,當我將有效的用戶名和密碼解析到url中時,我將得到令牌數的json響應。
第二個是get_message方法,我會從get_token得到一個帶有令牌的祕密消息。我能夠成功獲得令牌,但我被困在獲取祕密消息。
我如何傳遞令牌?

這裏是我的主要活動代碼:

private String urlJsonObj = "http://sfsuswe.com/413/get_token/?username=sahithiv&password=912549149"; 

private String urlJsonObj1="http://sfsuswe.com/413/get_message/?token="; 

private static String TAG = MainActivity.class.getSimpleName(); 

private Button btnMakeObjectRequest; 

ProgressDialog pDialog; 

private TextView txtResponse; 

private String jsonResponse; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 

btnMakeObjectRequest = (Button) findViewById(R.id.btnObjRequest); 

txtResponse = (TextView) findViewById(R.id.txtResponse); 

txtResponse.setMovementMethod(new ScrollingMovementMethod()); 

pDialog = new ProgressDialog(this); 

pDialog.setMessage("Please wait..."); 

pDialog.setCancelable(false); 

btnMakeObjectRequest.setOnClickListener(new View.OnClickListener() { 

@Override 

public void onClick(View v) { 

makeJsonObjectRequest(); 

} 

}); 

} 

/** 

* Method to make json object request where json response starts wtih { 

* */ 

private void makeJsonObjectRequest() { 

showpDialog(); 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, 

urlJsonObj, null, new Response.Listener<JSONObject>() { 

@Override 

public void onResponse(JSONObject response) { 

Log.d(TAG, response.toString()); 

try { 

// Parsing json object response 

// response will be a json object 

String token = response.getString("token"); 

jsonResponse = "\n\n\n"; 

jsonResponse += "token:" + token + "\n\n\n\n"; 

txtResponse.setText(jsonResponse); 

} catch (JSONException e) { 

e.printStackTrace(); 

Toast.makeText(getApplicationContext(), 

"Error: " + e.getMessage(), 

Toast.LENGTH_LONG).show(); 

} 

hidepDialog(); 

} 

}, new Response.ErrorListener() { 

@Override 

public void onErrorResponse(VolleyError error) { 

VolleyLog.d(TAG, "Error: " + error.getMessage()); 

Toast.makeText(getApplicationContext(), 

error.getMessage(), Toast.LENGTH_SHORT).show(); 

// hide the progress dialog 

hidepDialog(); 

} 

}); 

AppController.getInstance().addToRequestQueue(jsonObjReq); 

} 

private void showpDialog() { 

if (!pDialog.isShowing()) 

pDialog.show(); 

} 

private void hidepDialog() { 

if (pDialog.isShowing()) 

pDialog.dismiss(); 

} 

} 

回答

1

你需要通過與下一頁網址附加令牌

String token = response.getString("token"); 

對於下一頁 URL響應:

String nextUrl = urlJsonObj1+token; 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, 

nextUrl, null, new Response.Listener() { 

@Override 

public void onResponse(JSONObject response) { 

Log.d(TAG+"Final Response", response.toString()); 

} 

AppController.getInstance().addToRequestQueue(jsonObjReq); 

輸出將是:

{ 
    "description": "CSC 413.02 Spring 2016 Project 2 Secret Message", 
    "message": "On the neighboring shore the fires from the foundry chimneys burning high and glaringly into the night," 
} 

希望這將heelp你。

+0

感謝您的回覆。這是有道理的,我會盡力去解決它。 –

-1

您可以非常簡單地解決了這個問題....

  1. 創建兩個方法之一的get_token兩個用於get_message
  2. 第一次調用第一種方法,當你得到成功響應然後通過打電話給你的第二個方法您的令牌作爲參數。我檢查你的API響應,我認爲這是你的最佳解決方案。感謝
0

對不起,我沒有閱讀問題&代碼correctly.May是一個錯誤的答案

我猜你得到的字符串令牌作爲無效請求外時。

當我想使用vollley請求之外的響應時,我遇到了同樣的問題。

創建一個單獨的類

class store_response{ 
private static String token; 
public static void set_token(String token_separated_from_response) 
//to store the token 
{ 
token=token_separated_from_response; 
} 

//for retrieving token 
public static void get_token() 
{ 
return token; 
} 
} 

所以存儲的響應時只需調用 store_response.set_token(token_extracted_from_response);

並在排除請求之外進行檢索。 String token = store_response.get_token();

我從移動發佈這個抱歉,因爲沒有輸入代碼形式。