使用android第二次调用时无法找到会话

时间:2012-09-05 06:32:39

标签: php android facebook session

在我的应用程序中,我试图使用api从服务器中恢复数据。因为我试图获取facebook数据,当我第一次调用url时,我正在通过facebookid。代码是这样的,它应该从服务器调用另一个URL时。

我的问题是,当我第二次调用url时,我得到一个空值。这就是会话被删除了。 我的代码如下。

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();
    }
}

当我调用此函数时,我没有得到第一个函数创建的会话,而且我得到一个空数据。

这有什么问题?请任何人帮助我。

1 个答案:

答案 0 :(得分:1)

会话在“UserLogin.php”中创建。

使用SessionID在PHP中控制会话,可以是:

  1. 作为查询参数传递;您需要接收会话ID,然后在下次呼叫时添加到URL,或
  2. 传递了一个cookie;您需要接收cookie,然后在下次致电时将cookie发送到URL。
  3. 你的代码都没有做到:你只接受了JSON,你没有在cookie中读取并在下次发送,也没有在数据中收到SessionID并在下次调用时使用它。


    最简单的解决方案:

    1. 在第一次调用中,返回“session_id()”的内容作为json的一部分。请记住以后,存储在内存或文件中 - 但是你需要它。
    2. 在第二次调用userfbaction.php时,将该session_id作为参数发送
    3. 在userfbaction.php中,读取参数并调用session_start()之前传递session_id的“session_id()”。然后,这将继续前一个会话