当前位置: 首页 > 知识库问答 >
问题:

如何在PHP中读取从Android发送的JSON数据?

东明德
2023-03-14

我的android仿真器正在向PHP脚本发送请求,以访问MySQL数据。我通过给sql查询赋值来检查PHP脚本

get_details.php

if($tag==…)块和if(isset($\u POST['pid'])块正在执行,但当我将其用于查询时,我无法从数据库中获取值

<?php

$response = array();

$result = array();
$con = mysql_connect("localhost", "root", "system") or die(mysql_error());
mysql_select_db("patient", $con);

$tag = $_POST['tag'];
if ($tag == 'get_details')
{
    if (isset($_POST['pid']))
    { $pid = intval($_POST['pid']); //PATID in Database is in BIGINT
           $mob = $_POST['mob'];         //MOBILE is in VARCHAR
 //$result=mysql_query("SELECT * FROM patientinfo WHERE PATID =13 AND MOBILE=  25");
 $result=mysql_query("SELECT * FROM patientinfo WHERE PATID =$pid AND MOBILE=  $mob");
        if (!empty($result))
        {
        $result = mysql_fetch_array($result);

        $response["success"] = 1;
            $response["patid"] = $result["PATID"];
            $response["name"] = $result["FIRSTNAME"];
            $response["mobile"] = $result["MOBILE"];

            echo json_encode($response);
        }
        else {
            $response["success"] = 2;
            $response["message"] = "No patient found in that PatId";
            echo json_encode($response);
         }
    }
    else {
            $response["success"] = 3;
            $response["message"] = "PatientId Not Set";
            echo json_encode($response); 
         }
}
else
    { $response["success"] = 4;
      $response["message"] = "Tag not matching";
      echo json_encode($response);
    }

  ?>

主要活动。JAVA

public class Main_activity extends Activity {  

String response;    
EditText patid;
EditText mobnum;
TextView loginErrorMsg;

private static String KEY_SUCCESS ="success";   
private static String KEY_PID ="patid";
private static String KEY_MOBNUM ="mobile";
private static String KEY_NAME ="name";
//private static String KEY_CREATED_AT ="created_at";

DatabaseHandler db;
UserFunctions userFunctions;
JSONObject json_user;
JSONObject json;
Intent listview;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btnLogin = (Button) findViewById(R.id.login_button);
    btnLogin.setOnClickListener( new View.OnClickListener() {

  public void onClick(View arg0) {
  try{                  
    patid = (EditText) findViewById(R.id.patid_field);
        mobnum = (EditText) findViewById(R.id.pswd_field);

   if( (patid!=null && patid.getText().length()!=0) && (mobnum!=null &&      mobnum.getText().length()!=0))
{
userFunctions = new UserFunctions();

json = userFunctions.loginUser(patid.toString(), mobnum.toString());

//Toast.makeText(getBaseContext(), json.getString("success"), Toast.LENGTH_LONG).show();
 //Toast.makeText(getBaseContext(), json.getString("name"), Toast.LENGTH_LONG).show();             
 //Toast.makeText(getBaseContext(), json.getString("mobile"), Toast.LENGTH_LONG).show();

  try{
if(json.getString(KEY_SUCCESS)!=null)                                                                       loginErrorMsg.setText("Authenticated");
int res = Integer.parseInt(json.getString(KEY_SUCCESS)); //Unable to get value in res

  Toast.makeText(getBaseContext(), "Res="+res, Toast.LENGTH_LONG).show();
if(res==1)  //logged in
{                   
            db = new DatabaseHandler(getApplicationContext());
                json_user = json.getJSONObject("user");                                 
                                     userFunctions.logoutUser(getApplicationContext());
                                db.addUser(json_user.getString(KEY_PID),json_user.getString(KEY_NAME),json_user.getString(KEY_MOBNUM), json_user.getString(KEY_CREATED_AT));

                                Toast.makeText(getBaseContext(), "next", Toast.LENGTH_LONG).show();
                                listview= new Intent(Main_activity.this, activity_listview.class);
                                listview.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(listview);

                                Toast.makeText(getBaseContext(), "finish", Toast.LENGTH_LONG).show();
                                finish();                                   
                            }
                            else{
                                Toast.makeText(getBaseContext(), "Invalid ID/Mob", Toast.LENGTH_LONG).show();
                                loginErrorMsg.setText("Invalid Patient-ID/Mobile No.");
                            }
                        }                           
                    }
                    catch(JSONException je)
                    {
                        Toast.makeText(getBaseContext(), "json Exception", Toast.LENGTH_LONG).show();
                        je.printStackTrace();
                    }

                }
                else
                {

                }
              }
              catch(Exception e)
              {
                  Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
              }

        }
    });
}


}

JsonParser。JAVA

public class JsonParser {
static InputStream is= null;
static JSONObject jObj= null;
static String json = "";

public JsonParser() {

}

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) throws Exception
{
    try{
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    }catch(UnsupportedEncodingException e){
        e.printStackTrace();
    }catch(Exception e1){
        e1.printStackTrace();
    }
    try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8); //or iso-8859-1
        StringBuilder sb= new StringBuilder();
        String line=null;

        while((line = reader.readLine())!=null)
                {
                    sb.append(line+ "\n");  // \n
                }
        is.close();
        json = sb.toString();
        Log.e("JSON", json);

    }catch(Exception e1){
        Log.e("Buffer Error", "Error converting result"+ e1.toString());
    }

    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    return jObj;
}
  }

用户函数。JAVA

public class UserFunctions {
private JsonParser jsonParser;

private static String loginUrl ="http://10.0.2.2/hcsapi/get_details.php";
private static String getdetails_tag ="get_details";

public UserFunctions()
{
    jsonParser =new JsonParser();
}
public JSONObject loginUser(String patid, String mobnum)throws Exception
{
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag",getdetails_tag));
    params.add(new BasicNameValuePair("pid",patid));
    params.add(new BasicNameValuePair("mob",mobnum));
    System.out.print(patid);
    JSONObject json= jsonParser.getJSONFromUrl(loginUrl, params);

    return json;
}
 }

如果要在php中使用json_decode(),我应该如何调用它?非常感谢您的帮助,因为我是android的新手。谢谢

共有2个答案

董飞
2023-03-14

您只需在PHP API文件中读取移动发布的json数据,如下所示。

<?php
$foo = file_get_contents("php://input");
$result=json_decode($foo, true);
print"<pre>";
print_r($result);
?>
白昊东
2023-03-14

我省略了. toString()patid.getText()和mobnum.getText()。所以我应该像下面这样通过。否则EditText的名称将被传递。

 json = userFunctions.loginUser(patid.getText().toString(), mobnum.getText().toString()); 
 类似资料:
  • 问题内容: 我是java的新手,我为这个问题苦苦挣扎了2天,最后决定在这里提问。 我正在尝试读取jQuery发送的数据,因此可以在servlet中使用它 jQuery的 Servlet 我非常感谢您可以提供的任何帮助。 问题答案: 除非正确发送,否则将无法在服务器上对其进行解析: 您必须使用JSON字符串来发送JavaScript对象。 然后在服务器上: 您可以手动或使用任何库来解析字符串(我建议

  • 我试图做一些非常简单的东西,按钮计数器,有一个按钮在我的HTML-php当我点击它我发送数据'按'到我的arduino和它使led闪烁,到目前为止,还不错,但然后我想发送信号,当我在arduino中按下按钮,我想让我的php读取字符串"点击次数: N"的串行端口,N是从arduio的推送计数。 这里的问题是,在arduino串行我可以看到他字符串,一切正常,但在PHP我做

  • 问题内容: 我正在尝试读取JSON数组。这是我的代码。 我的示例JSON文件语法如下所示, 前面有一个大括号。当我尝试执行此代码块时,出现错误提示 JSONArray文本必须在....的字符1处以’[‘开头。 有没有人遇到过这样的问题?任何帮助将不胜感激。如果可以的话,请告诉我一个示例代码块。提前致谢。 问题答案: JSON对象以a开头,以a 结尾,而JSON数组以a开头,以a 结尾。 根据您的情

  • 问题内容: 如何将JSON数据从浏览器中的Javascript发送到服务器,并由PHP在其中进行解析? 问题答案: 我在这里获得了很多信息,所以我想发布我发现的解决方案。 问题: 从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。 环境: Windows上的浏览器(Firefox)中的Javascript。LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3

  • 问题内容: 如何使用PHP从JSON对象获取数据? 这是我拥有的PHP代码: 问题答案: foreach($json as $i){ echo $i[‘name’]; }

  • 我想连接到API,但我需要用post发送数据,但用JSON接收。 file_get_contents(url_here):打开流失败