php - Android JSON解析返回null

标签 php android mysql json

我正在尝试使用 php 和 JSON 文件将 MYSQL 与 android 应用程序连接,目前我面临的问题是 JSONParser 类总是返回 null,我不知道为什么,因为我可以查看我的 JSON 文件并且它是有效的

而且我的代码中有两个异常(exception),第一个是:

        12-08 09:17:43.486 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from GradienCache
        12-08 09:17:43.498 29666-29666/alharbi.astrong texttheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384
        12-08 09:17:43.518 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
        12-08 09:17:43.522 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384

第二个是:

12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/Buffer Error: Error converting result java.lang.NullPointerException: lock == null
12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/JSON Parser: Error parsing data org.json.JSONException: End of input at character 0 of 

这是包含问题的类

public class ViewInfo extends AppCompatActivity {
    JSONParser jsonParser;
    ProgressDialog progressDialog;
    int value;
    String[] names,emails,levels,ids, weights,hieghts,genders,bds,addresses,ages,phones;
    ListView listView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_info);
        jsonParser=new JSONParser();
        listView2=(ListView)findViewById(R.id.listView2);

        new DisplayViewInfo().execute();
    }




    class DisplayViewInfo extends AsyncTask<String,String,String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog=new ProgressDialog(ViewInfo.this);
            progressDialog.setTitle("Wait...");
            progressDialog.show();
        }




        @Override
        protected String doInBackground(String... strings) {

          List<NameValuePair> list= new ArrayList<NameValuePair>();
          //  HashMap<String,String> list = new HashMap<>();


            // jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php","POST",list);
           JSONObject jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php", "POST", list);


            try{
                if(jsonObject!=null && !jsonObject.isNull("value")){


                    value=jsonObject.getInt("value");
                    JSONArray jsonArray=jsonObject.getJSONArray("Customers");
                    names=new String[jsonArray.length()];
                    emails=new String[jsonArray.length()];
                    phones=new String[jsonArray.length()];
                    ids=new String[jsonArray.length()];
                    weights=new String[jsonArray.length()];
                    hieghts=new String[jsonArray.length()];
                    genders=new String[jsonArray.length()];
                    levels=new String[jsonArray.length()];
                   ages=new String[jsonArray.length()];
                    addresses=new String[jsonArray.length()];
                    bds=new String[jsonArray.length()];
                    for(int i=0;i<jsonArray.length();i++){
                        JSONObject objcet=jsonArray.getJSONObject(i);
                        ids[i]=objcet.getString("Customer_ID");
                        names[i]=objcet.getString("Name");
                        emails[i]=objcet.getString("Email");
                        phones[i]=objcet.getString("Phone_number");
                        weights[i]=objcet.getString("Weight");
                        hieghts[i]=objcet.getString("Height");
                        genders[i]=objcet.getString("Gender");
                        levels[i]=objcet.getString("Level");
                        ages[i]=objcet.getString("age");
                        addresses[i]=objcet.getString("address");
                        bds[i]=objcet.getString("Date_of_birth");


                    }
                }else{
                    value=0;
                }

            }catch (Exception e){
                Log.d("ERROR", e.getMessage());
            }

            return null;
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if(value==1){
                Toast.makeText(getApplicationContext(), "Done...", Toast.LENGTH_LONG).show();
                ArrayAdapter<String> adapter=new ArrayAdapter<String>(ViewInfo.this,android.R.layout.simple_list_item_1,android.R.id.text1,names);
                listView2.setAdapter(adapter);
            }else if(value==0)
                Toast.makeText(getApplicationContext(),"Error...",Toast.LENGTH_LONG).show();
            else Toast.makeText(getApplicationContext(),"OUT...",Toast.LENGTH_LONG).show();

            progressDialog.dismiss();
        }


        }





    }

这是我的 JSON 解析器:

公共(public)类 JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
                                  List<NameValuePair> params) {

    // Making HTTP request
    try {

        // check for request method
        if(method.equals("POST")){
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));

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

        }else if(method.equals("GET")){
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

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


    } catch (UnsupportedEncodingException e) {
        //e.printStackTrace();
    } catch (ClientProtocolException e) {
        //  e.printStackTrace();
    } catch (IOException e) {
        //e.printStackTrace();
    }

    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();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

}

有人可以帮我吗?由于这些错误,我已经陷入困境好几天了

最佳答案

从该 JSON 错误的外观来看,您似乎没有收到有效的响应,并且您的响应字符串只是空的。发生这种情况时,我通常会检查 Web 服务调用的 html 响应代码以及构建后的实际字符串。这有助于确定 Web 服务是否有问题,或者您对 Web 服务的调用是否有问题。

我应该提到的另一件事是,您正在为网络调用使用已弃用的代码。 apache http 代码已从 Android 框架中删除,因此您应该使用 HttpURLConnection 来进行 Web 服务调用。

我今天心情很好,而且感觉很有帮助,所以我将向您提供用于获取此 JSON 响应的代码:)

//The JSON we will get back as a response from the server
JSONObject jsonResponse = null;

//Http connections and data streams
URL url;
HttpURLConnection httpURLConnection = null;
OutputStreamWriter outputStreamWriter = null;

try {

    //open connection to the server
    url = new URL("your_url_to_web_service");
    httpURLConnection = (HttpURLConnection) url.openConnection();

    //set request properties
    httpURLConnection.setDoOutput(true); //defaults request method to POST
    httpURLConnection.setDoInput(true);  //allow input to this HttpURLConnection
    httpURLConnection.setRequestProperty("Content-Type", "application/json"); //header params
    httpURLConnection.setRequestProperty("Accept", "application/json"); //header params
    httpURLConnection.setFixedLengthStreamingMode(jsonToSend.toString().getBytes().length); //header param "content-length"

    //open output stream and POST our JSON data to server
    outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream());
    outputStreamWriter.write(jsonToSend.toString());
    outputStreamWriter.flush(); //flush the stream when we're finished writing to make sure all bytes get to their destination

    //prepare input buffer and get the http response from server
    StringBuilder stringBuilder = new StringBuilder();
    int responseCode = httpURLConnection.getResponseCode();

    //Check to make sure we got a valid status response from the server,
    //then get the server JSON response if we did.
    if(responseCode == HttpURLConnection.HTTP_OK) {

        //read in each line of the response to the input buffer
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }

        bufferedReader.close(); //close out the input stream

    try {
        //Copy the JSON response to a local JSONObject
        jsonResponse = new JSONObject(stringBuilder.toString());
    } catch (JSONException je) {
        je.printStackTrace();
    }

} catch (IOException ioe) {
    ioe.printStackTrace();
} finally {
    if(httpURLConnection != null) {
        httpURLConnection.disconnect(); //close out our http connection
    }

    if(outputStreamWriter != null) {
        try {
            outputStreamWriter.close(); //close our output stream
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

//Return the JSON response from the server.
return jsonResponse;

关于php - Android JSON解析返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160066/

相关文章:

java - 如何在录音时为语音留言设置定时器(与 WhatsApp 语音留言录音功能相同)?

java - Android ClassNotFoundException

mysql - 通过在 sql 中添加值来更新整行

php - Prestashop - 如何将自定义输入字段添加到产品自定义并写入数据库

PHP返回值

php - PHP 上的左连接

php - 如何根据 HTML FORM 中定义的变量动态生成 MYSQL UPDATE 语句

php - $_SESSION 仅适用于 website.com,不适用于 www.website.com

android - 在 Android 中使用 translateX 和 translateY 时 View 上的 anchor 是什么

php - 基于现有行的受控表查询