简体   繁体   中英

Android Mysql get specific data from table

i have my java code here.

package com.atthesis.ticmip;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class Mainusersdictionary extends ListActivity {
    // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();

    ArrayList<HashMap<String, String>> dilist;

    // url to get all products list
    private static String url_all_dictionary = "http://10.0.2.2/android/get_dictionary.php";

    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_dictionary = "disease";
    private static final String TAG_RID = "rid";
    private static final String TAG_NAME = "disease";

    // products JSONArray
    JSONArray diseases = null;


        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_usersdictionary);
        setTitle("Mga Sakit");

        StrictMode.enableDefaults();
     // Hashmap for ListView
        dilist = new ArrayList<HashMap<String, String>>();

        // Loading products in Background Thread
        new LoadAlldisease().execute();

        // Get listview
        //ListView lv = getListView();
        ListView lv =(ListView)findViewById(android.R.id.list);





    }


        /**
         * Background Async Task to Load all product by making HTTP Request
         * */
        class LoadAlldisease extends AsyncTask<String, String, String> {

            /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(Mainusersdictionary.this);
                pDialog.setMessage("Loading diseases. Please wait...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }

            /**
             * getting All products from url
             * */
            protected String doInBackground(String... args) {
                // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                // getting JSON string from URL
                JSONObject json = jParser.makeHttpRequest(url_all_dictionary, "GET", params);

                // Check your log cat for JSON reponse
                Log.d("Diseases: ", json.toString());

                try {
                    // Checking for SUCCESS TAG
                    int success = json.getInt(TAG_SUCCESS);

                    if (success == 1) {
                        // products found
                        // Getting Array of Products
                        diseases = json.getJSONArray(TAG_dictionary);

                        // looping through All Products
                        for (int i = 0; i < diseases.length(); i++) {
                            JSONObject c = diseases.getJSONObject(i);

                            // Storing each json item in variable
                            String rid = c.getString(TAG_RID);
                            String reg = c.getString(TAG_NAME);

                            // creating new HashMap
                            HashMap<String, String> map = new HashMap<String, String>();

                            // adding each child node to HashMap key => value
                            map.put(TAG_RID, rid);
                            map.put(TAG_NAME, reg);

                            // adding HashList to ArrayList
                            dilist.add(map);
                        }
                    } else {
                        // no products found
                        // Launch Add New product Activity
                        /*Intent i = new Intent(getApplicationContext(),
                                NewProductActivity.class);
                        // Closing all previous activities
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);*/
                        Toast.makeText(getApplicationContext(), "No Region", Toast.LENGTH_LONG).show();

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                return null;
            }

            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog after getting all products
                pDialog.dismiss();
                // updating UI from Background Thread
                runOnUiThread(new Runnable() {
                    public void run() {
                        /**
                         * Updating parsed JSON data into ListView
                         * */
                        ListAdapter adapter = new SimpleAdapter(
                                Mainusersdictionary.this, dilist,
                                R.layout.ctxtview, new String[] { TAG_RID,
                                        TAG_NAME},
                                new int[] { R.id.rid, R.id.name });
                        // updating listview
                        ListView lv =(ListView)findViewById(android.R.id.list);
                        lv.setAdapter(adapter);
                        //setListAdapter(adapter);

                    }
                });

            }

        }





}

and a php file where it can retrieve data from mysql

<?php

/*
 * Following code will list all the products
 */

// array for JSON response
$response = array();


// include db connect class
require_once __DIR__ . '/db_connect.php';

// connecting to db
$db = new DB_CONNECT();

// get all products from products table
$result = mysql_query("SELECT rid, disease FROM ddictionary") or die(mysql_error());

// check for empty result
if (mysql_num_rows($result) > 0) {
    // looping through all results
    // products node
    $response["diseases"] = array();

    while ($row = mysql_fetch_array($result)) {
        // temp user array
        $diseases = array();
        $diseases["rid"] = $row["rid"];
        $diseases["disease"] = $row["disease"];



        // push single product into final response array
        array_push($response["diseases"], $regions);
    }
    // success
    $response["success"] = 1;

    // echoing JSON response
    echo json_encode($response);
} else {
    // no products found
    $response["success"] = 0;
    $response["message"] = "No products found";

    // echo no users JSON
    echo json_encode($response);
}
?>

i get the error

01-28 20:48:26.517: E/JSON Parser(5033): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
01-28 20:48:26.582: I/Choreographer(5033): Skipped 427 frames!  The application may be doing too much work on its main thread.
01-28 20:48:26.991: I/Choreographer(5033): Skipped 104 frames!  The application may be doing too much work on its main thread.
01-28 20:48:27.096: E/AndroidRuntime(5033): FATAL EXCEPTION: AsyncTask #1
01-28 20:48:27.096: E/AndroidRuntime(5033): Process: com.atthesis.ticmip, PID: 5033
01-28 20:48:27.096: E/AndroidRuntime(5033): java.lang.RuntimeException: An error occured while executing doInBackground()
01-28 20:48:27.096: E/AndroidRuntime(5033):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.lang.Thread.run(Thread.java:818)
01-28 20:48:27.096: E/AndroidRuntime(5033): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
01-28 20:48:27.096: E/AndroidRuntime(5033):     at com.atthesis.ticmip.Mainusersdictionary$LoadAlldisease.doInBackground(Mainusersdictionary.java:97)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at com.atthesis.ticmip.Mainusersdictionary$LoadAlldisease.doInBackground(Mainusersdictionary.java:1)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-28 20:48:27.096: E/AndroidRuntime(5033):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-28 20:48:27.096: E/AndroidRuntime(5033):     ... 4 more

This error causes my app stops. So what would be the solution or way to solve this. I made all the google thingy here but no effect on my app. Please help me to fix this or what would be the better code here? thanks in advance sir

Can you please post the output of your server call? Ie. open this url:

http://10.0.2.2/android/get_dictionary.php

In your browser and see what you get.

Message

"Value <br of type java.lang.String"

suggests that starting characters of the response the app recieves is an HTML code instead of a JSON array. Could be some error/warning/notice output on the server side.


EDIT 1

I just wanted to see the actual server response to see if your server returns valid JSON object. The way I see is that somewhere in class JSONParser (which I assume is a class you've written yourself) you're creating a JSONObject out of data that are not really JSON data, or at least not recognized as such.

There are 2 options I would explore:

  1. Create a static .json file with contents you're sure are correct and consume that in the app instead of the PHP file output. If that works fine, you know your issue is on the server, not in the app.

  2. From the php file you've posted, its not clear if you've set server's output header to app/json. Though its not mandatory, I'd advise you to always specify generated output headers, such as:

    header('Content-Type: application/json');

Place this in front of the echo json_encode(...) line. (However, you cannot have any other output (either echo or error message) from the server BEFORE you send headers, otherwise you'll get an error message.)

I suggest you try these two options and let us know what happened/changed.

I think i had same problem before, check for your .php output. I've noticed that JSON alike parser reads every part of output code including html comments. If it is possible for you use another HttpClient (Apache maybe) and check your output in Toast.makeText() or something like this. Also try using exit(json_encode($response));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM