可以';t使用android第二次调用时找不到会话


Can't find session while calling for the second time using android

在我的应用程序中,我试图使用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可以是:

  1. 作为查询参数传递;您需要接收会话ID,然后在下次呼叫时添加到URL,或者
  2. 递上一块饼干;您需要接收cookie,然后在下次通话时将cookie发送到URL

您的代码既没有这样做:您只接受返回的JSON,没有读取cookie并在下次发送,也没有接收数据中的SessionID并在下次调用中使用它。


最简单的解决方案:

  1. 在第一个调用中,将"session_id()"的内容作为json的一部分返回。记住它以备日后使用,存储在内存或文件中—无论您需要什么
  2. 在对userfbaction.php的第二次调用中,将session_id作为参数发送
  3. 在userfbaction.php中,读取参数并调用"session_id()",在session_start()之前传入session_id。然后继续上一个会话