在我的应用程序中,我试图使用api从服务器检索数据。由于我试图获得facebook的数据,当我第一次调用url时,我正在传递facebookid。代码是这样的,当调用另一个url时,它应该从服务器获取数据。
我的问题是,当我第二次调用url时,我得到了一个null值。这就是会话被删除的地方。我的代码如下。
public void getdetails(){
JSONObject json = JSONfunctions.getJSONfromURL(unielement+"UserLogin.php?faceid="+facebookID);
System.out.println(unielement+"UserLogin.php?faceid="+facebookID+" "+json);
try{
JSONArray data = json.getJSONArray("data");
//Loop the Array
for(int i=0;i < data.length();i++){
ArrayList<String> list = new ArrayList<String>();
list.add(data.getJSONObject(0).getString("CreditBySelf"));
list.add(data.getJSONObject(0).getString("CreditThroughFriend"));
list.add(data.getJSONObject(0).getString("ForUser"));
list.add(data.getJSONObject(0).getString("LDrawTicket"));
list.add(data.getJSONObject(0).getString("Buy-In"));
list.add(data.getJSONObject(0).getString("RemVote"));
list.add(data.getJSONObject(0).getString("Voted"));
StringBuilder sb = new StringBuilder();
for (String s : list)
{
sb.append(s);
sb.append("'t");
}
uid = list.get(0);
name = list.get(1).toString();
System.out.println(list);
textView_name1.setText(name);
}
}
catch(JSONException e1){
Toast.makeText(getBaseContext(), "No name Found"+e1 ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
}
当我调用上面的函数时,会创建一个会话,当我调用下面的代码时,它应该在那里。
public void getdataforsharing(){
JSONObject json = JSONfunctions.getJSONfromURL(unielement+"userfbaction.php");
System.out.println(unielement+"userfbaction.php "+json);
try{
JSONArray wholedata = json.getJSONArray("data");
System.out.println(wholedata);
JSONObject data = wholedata.getJSONObject(0);
System.out.println(data);
//Loop the Array
for(int i=0;i < data.length();i++){
list1 = new ArrayList<String>();
/*list1.add(data.getJSONObject(0).getString("wall_image"));
list1.add(data.getJSONObject(0).getString("wall_title"));
list1.add(data.getJSONObject(0).getString("wall_Description"));*/
list1.add(data.getString("wall_image"));
list1.add(data.getString("wall_title"));
list1.add(data.getString("wall_Description"));
StringBuilder sb = new StringBuilder();
for (String s : list1)
{
sb.append(s);
sb.append("'t");
}
System.out.println("Share on facebook"+list1.get(0));
}
}
catch(JSONException e1){
Toast.makeText(getBaseContext(), "No name Found"+e1 ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
}
当我调用这个函数时,我没有得到第一个函数创建的会话,而是得到了一个空数据。
这是怎么回事?请任何人帮帮我。
会话在"UserLogin.php"中创建。
会话在PHP中通过使用SessionID进行控制,SessionID可以是:
- 作为查询参数传递;您需要接收会话ID,然后在下次呼叫时添加到URL,或者
- 递上一块饼干;您需要接收cookie,然后在下次通话时将cookie发送到URL
您的代码既没有这样做:您只接受返回的JSON,没有读取cookie并在下次发送,也没有接收数据中的SessionID并在下次调用中使用它。
最简单的解决方案:
- 在第一个调用中,将"session_id()"的内容作为json的一部分返回。记住它以备日后使用,存储在内存或文件中—无论您需要什么
- 在对userfbaction.php的第二次调用中,将session_id作为参数发送
- 在userfbaction.php中,读取参数并调用"session_id()",在session_start()之前传入session_id。然后继续上一个会话