无法从php mysql检索数据到android活动 [英] Cannot Retrieve data from php mysql to android activity

查看:139
本文介绍了无法从php mysql检索数据到android活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

新的Android编程。所以这里的问题。
我目前使用一个php框架codeigniter从mysql查询我的数据。当我在浏览器中键入URL时,我看到我的json数据。但是当我检索它在我的Android活动,它返回null。
这里是我的代码。
php code

Im new to android programming. So here's the problem. I am currently using a php framework codeigniter to query my data from mysql. When i type the url in my browser i see my json data. But when i retrieving it in my android activity it returns null. Here is my code. php code

function getdrug(){
            $id = $_GET['letter'];
            //echo $_GET['letter'];
            header('Content-type: application/json');
            if($id == 'a'){
                $this->db->like('Generic_Name','A');
                $value['Drugs'] = $this->db->get('drugs')->result();
                echo json_encode($value);
            }
    }

我的Android活动

my android activity

ListView lv;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String URL = "http://emedteam-001-site1.ctempurl.com/emed/home/getdrug?letter=a";
            jsonobject = JSONfunctions.getJSONfromURL(URL);
            Toast.makeText(getApplicationContext(),URL + "\n" +jsonobject, Toast.LENGTH_LONG).show();   }
    });

my JSONfunctions

my JSONfunctions

public class JSONfunctions {

    public static JSONObject getJSONfromURL(final String URL){
        InputStream is = null;
        String result = "";
        String params = "";

        JSONObject jArray = null;


        try{

            HttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
            HttpGet httpget = new HttpGet(URL);

            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        }
        catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }
        //Convert
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
            } catch (Exception e) {
                Log.e("log_tag", "Error converting result " + e.toString());
         }
        //parse json data
         try {

                jArray = new JSONObject(result);
                System.out.print(jArray);
            } catch (JSONException e) {
                Log.e("log_tag", "Error parsing data " + e.toString());
            }
        return jArray;

    }
}

这里是我的网址链接< a href =http://emedteam-001-site1.ctempurl.com/emed/home/getdrug?letter=a =nofollow> http://emedteam-001-site1.ctempurl.com/emed/ home / getdrug?letter = a

推荐答案

HTTPClient已弃用,因此您应避免使用。查看此 HttpClient已弃用(android studio,Target = api 22)

HTTPClient is deprecated so you should avoid it. Look at this HttpClient is deprecated (android studio, Target=api 22)

这是我从json获取内容的工作函数

This is my working function to get content from json

    public static JSONObject getJSONfromURL(final String URL){

        JSONObject jArray = null;
        try {
            //URL = "http://emedteam-001-site1.ctempurl.com/emed/home/getdrug?letter=a";
            URLConnection conn = new URL(URL).openConnection();
            conn.addRequestProperty("Accept", "application/json");
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();

            String str = sb.toString();
            sb = null;
            jArray  = new JSONObject(str);                          
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jArray;  
    } 

已编辑:您需要调用此函数内部AsyncTask以避免 android.os.NetworkOnMainThreadException

EDITED: You need to call to this function inside AsyncTask to avoid android.os.NetworkOnMainThreadException

ListView lv;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            new StackOverflowTask().execute();
        }
    });

    class StackOverflowTask extends AsyncTask<String, Void, JSONObject> {
        protected JSONObject doInBackground(String... urls) {
            try {
                JSONObject test = JSONfunctions.getJSONfromURL("http://emedteam-001-site1.ctempurl.com/emed/home/getdrug?letter=a");
                return test;
            } catch (Exception e) {
                return null;
            }
        }

        protected void onPostExecute(JSONObject test) {
            if(test != null)
                Toast.makeText(TestActivity.this, "Hello Stackoverflow ;)",Toast.LENGTH_SHORT).show();
    }
}

我希望它有帮助!

这篇关于无法从php mysql检索数据到android活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆