-1

在我的应用程序中,我试图使用 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();
    }
}

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

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

4

1 回答 1

1

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

会话在 PHP 中通过使用 SessionID 来控制,它可以是:

  1. 作为查询参数传递;您需要接收会话 ID,然后在下次调用时添加到 URL,或者
  2. 传入一个cookie;您需要接收 cookie,然后在您下次调用时将 cookie 发送到 URL。

您的代码没有做任何事情:您只接受了 JSON,您没有读取 cookie 并下次发送,也没有接收数据中的 SessionID 并将其用于下一次调用。


在您的情况下最简单的解决方案:

  1. 在第一次调用中,将“session_id()”的内容作为 json 的一部分返回。记住它以备后用,存储在内存或文件中 - 无论你需要它。
  2. 在对 userfbaction.php 的第二次调用中,将 session_id 作为参数发送
  3. 在 userfbaction.php 中,读取参数并在 session_start() 之前调用传入 session_id 的“session_id()”。这将继续上一个会话
于 2012-09-05T07:00:05.743 回答