【问题标题】:search about specific value from mysql by android通过android从mysql中搜索特定值
【发布时间】:2016-03-02 06:17:25
【问题描述】:

数据库已连接,一切都很好,但它只显示结果的第一个值

PHP的代码:

$res['medicine_name'], "ID_P"=>$res['ID_Pharmacy'], "id_M"=>$res['id_M'] ) ); echo json_encode(array("result"=>$result)); mysqli_close($con); } ?>

这是android中的代码:

package net.simplifiedcoding.gettingspecificdata;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editTextId;
    private Button buttonGet;
    private TextView textViewResult;

    private ProgressDialog loading;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextId = (EditText) findViewById(R.id.editTextNameM);
        buttonGet = (Button) findViewById(R.id.buttonSearch);
        textViewResult = (TextView) findViewById(R.id.textViewResult);

        buttonGet.setOnClickListener(this);
    }

    private void SearchMedicine() {
        String id = editTextId.getText().toString().trim();
        if (id.equals("")) {
            Toast.makeText(this, "Please enter an medicine name", Toast.LENGTH_LONG).show();
            return;
        }
        loading = ProgressDialog.show(this,"Please wait...","Fetching...",false,false);

        String url = Config.DATA_URL +editTextId.getText().toString().trim();

        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                loading.dismiss();
                showJSON(response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();
            }
        });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

    private void showJSON(String response){
        String nameOfMedicine="";
        String IDPharmacy="";
        String IDMedicine = "";
        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);
            JSONObject searchData = result.getJSONObject(0);
            nameOfMedicine = searchData.getString(Config.KEY_MEDICINE_NAME);
            IDPharmacy = searchData.getString(Config.KEY_ID_PHARMACY);
            IDMedicine = searchData.getString(Config.KEY_ID_MEDICINE);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        textViewResult.setText("Name of medicine:\t"+nameOfMedicine+"\nID Pharmacy:\t" +IDPharmacy+ "\nID Medicine:\t"+ IDMedicine);
    }

    @Override
    public void onClick(View v) {

        SearchMedicine();
    }
}

输出: output of code

【问题讨论】:

  • 您的代码仅解析返回的 JSON 的第一个元素。您将不得不解析所有这些,并且您将必须实现一个可以一次显示多个 1 的 UI - 可能是 ListView,但其他解决方案也可以。

标签: android


【解决方案1】:

这是php:

<?php 

    if($_SERVER['REQUEST_METHOD']=='GET'){

        $medicine_name  = $_GET['medicine_name'];

        //$id  = $_GET['id'];

        require_once('dbConnectp.php');

         $sql = "SELECT * FROM medicine WHERE medicine_name='".$medicine_name."' AND stuteus='avilable'";

         //SELECT * FROM `medicine` WHERE `medicine_name` LIKE 'M1'
        //$sql = "SELECT * FROM Get WHERE id='".$id."'"; WHERE medicine_name=$Name_medicine

        $r = mysqli_query($con,$sql);

        $res = mysqli_fetch_array($r);

        $result = array();

        array_push($result,array(
            "medicine_name"=>$res['medicine_name'],
            "ID_P"=>$res['ID_Pharmacy'],
            "id_M"=>$res['id_M']
            )
        );

        echo json_encode(array("result"=>$result));

        mysqli_close($con);

    }
    ?>

【讨论】:

    【解决方案2】:

    错误出现在 showJSON 方法中,您没有迭代 JSON 数组以获取每个 JSON 对象并将其附加到 TextView。只拿第一个。

    正确的showJSON()

    private void showJSON(String response){
        String nameOfMedicine="";
        String IDPharmacy="";
        String IDMedicine = "";
        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);
            textViewResult.setText("");
            for(int i=0;i<result.length();i++){
                    JSONObject searchData = result.getJSONObject(i);
                    nameOfMedicine = searchData.getString(Config.KEY_MEDICINE_NAME);
                    IDPharmacy = searchData.getString(Config.KEY_ID_PHARMACY);
                    IDMedicine = searchData.getString(Config.KEY_ID_MEDICINE);
            String temp = textViewResult.getText()+" \n";
            textViewResult.setText(temp+"Name of medicine:\t"+nameOfMedicine+"\nID Pharmacy:\t" +IDPharmacy+ "\nID Medicine:\t"+ IDMedicine);
        }
    
    
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
    }
    

    【讨论】:

    • 每次点击按钮搜索时重复相同的值不要取另一个值
    • 其实我听不懂你在说什么。以任何方式在循环之前添加textViewResult.setText("") 以停止为textview 附加相同的值。答案已更新。
    猜你喜欢
    • 2015-05-27
    • 2020-11-20
    • 1970-01-01
    • 2016-07-23
    • 2019-09-12
    • 2016-11-13
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多