Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在android中使用json Parsing将数据从服务器添加到listView时获取空指针异常_Android_Json_Android Listview_Nullpointerexception - Fatal编程技术网

尝试在android中使用json Parsing将数据从服务器添加到listView时获取空指针异常

尝试在android中使用json Parsing将数据从服务器添加到listView时获取空指针异常,android,json,android-listview,nullpointerexception,Android,Json,Android Listview,Nullpointerexception,我正在尝试从php获取数据&希望将其放在一个简单的listView而不是TextView中。当我使用TextView数据显示时,但当我使用在ListView中放置数据时,我只会得到空指针异常。 请建议我并说明我的错误。 代码如下: package cse.project.medical; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamRea

我正在尝试从php获取数据&希望将其放在一个简单的listView而不是TextView中。当我使用TextView数据显示时,但当我使用在ListView中放置数据时,我只会得到空指针异常。 请建议我并说明我的错误。 代码如下:

    package cse.project.medical;

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONObject;

    import android.annotation.TargetApi;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public class Patient_biodata extends Activity {

    String pat_name, total_title;
    ListView listView;
    // TextView profile_show;
    Button update;
    ArrayAdapter<String > adapter;
    String[] arr;

    protected void onCreate(Bundle savedInstanceState) {
        Log.e("ni", "doc biodata has  started");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.patient_biodata);

        StrictMode.enableDefaults();
        ActionBar action_bar = getActionBar();

        Intent i = getIntent();
        // getting attached intent data
        pat_name = i.getStringExtra("person_name");
        total_title = "Hello...." + pat_name;
        action_bar.setTitle(total_title);

        // profile_show = (TextView) findViewById(R.id.show_profile);
        update = (Button) findViewById(R.id.update_btn);
        listView = (ListView) findViewById(R.id.listView2);
        get_all_information_of_a_user();
        update.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                alert_update_method();

            }
        });
    }

    protected void alert_update_method() {
        // TODO Auto-generated method stub

    }

    protected void get_all_information_of_a_user() {
        String result = "";
        InputStream isr = null;
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("pat_name", pat_name));

        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                    "http://192.168.56.1/imp/JSON/json_pat_biodata.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            isr = entity.getContent();
            Log.e("connection", "connection success");

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
            // profile_show.setText("Couldn't connect to database");
        }

        // convert response to string
        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    isr, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            isr.close();
            result = sb.toString();
            Log.e("connection", "convertion success");
            Log.e("result", result);
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        // parse json data
        try {
            //String s = "";
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {

                JSONObject json = jArray.getJSONObject(i);

                arr[0] = json.getString("p_name");
                arr[1] = json.getString("p_age");
                arr[2] = json.getString("p_gender");
                arr[3] = json.getString("p_address");
                arr[4] = json.getString("p_mobile");
                arr[5] = json.getString("p_email");
                arr[6] = json.getString("p_nationality");
                arr[7] = json.getString("p_username");

            }
            Log.e("before", "adapter");
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    Patient_biodata.this, android.R.layout.simple_list_item_1,
                    arr);
            listView.setAdapter(adapter);
            Log.e("after", "adapter");
            // profile_show.setText(s);
        } catch (Exception e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }

    }

}
我的XML代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp" >

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_weight="3"
                    android:text="Your Profile"
                    android:textSize="20sp"
                    android:textStyle="italic" />

                <Button
                    android:id="@+id/update_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                     android:layout_weight="1"
                    android:text="Update" />

            </LinearLayout>

        </LinearLayout>
    </ScrollView>

    <ListView
        android:id="@+id/listView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
php代码是:

<?php

    $host='localhost';
    $uname='root';
    $pwd='';
    $db="hospital";

    $con = mysql_connect($host,$uname,$pwd) or die("connection failed");
    mysql_select_db($db,$con) or die("db selection failed");
    $name = $_POST['pat_name'];

        $find_pat_id = "select p_name,p_age,p_gender,p_address,p_mobile,p_email,p_nationality,p_username from current_patient where p_username = '$name'";
    $p_id_run = mysql_query($find_pat_id);  

     if(mysql_num_rows($p_id_run)>0)
        {
            while($row=mysql_fetch_assoc($p_id_run))
                    {
                        $flag[]=$row;
                    }

             print(json_encode($flag));
        }

    mysql_close($con);

?>

看起来你的主要问题是你没有初始化你的arr数组,也就是说你从来没有做过arr=newstring[8]; 这可能是你的NPE的原因

但是,看起来您只是从JSON结果中给适配器一条记录

您可能需要创建一个自定义适配器,并为simple_list_item_1.xml中的每个项目创建一个TextView

但是,为了让您走上正确的道路,请先尝试以下方法:

// parse json data
        try {
            //String s = "";
            JSONArray jArray = new JSONArray(result);
            arr = new String[jArray.length()]; //initialize your array
            for (int i = 0; i < jArray.length(); i++) {

                JSONObject json = jArray.getJSONObject(i);

                StringBuffer buff = new StringBuffer();

                buff.append(json.getString("p_name") + " ");
                buff.append(json.getString("p_age") + " ");
                buff.append(json.getString("p_gender") + " ");
                buff.append(json.getString("p_address") + " ");
                buff.append(json.getString("p_mobile") + " ");
                buff.append(json.getString("p_email") + " ");
                buff.append(json.getString("p_nationality") + " ");
                buff.append(json.getString("p_username");

                arr[i] = buff.toString();

            }
            Log.e("before", "adapter");
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    Patient_biodata.this, android.R.layout.simple_list_item_1,
                    arr);
            listView.setAdapter(adapter);
            Log.e("after", "adapter");
            // profile_show.setText(s);
        } catch (Exception e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }

您可以发布stacktrace吗?请发布您的简单列表项目。您的项目xml中只有一个文本视图?您希望数据如何显示?发布堆栈跟踪,以及XML布局是否为R.layout.patient_biodata?我想是的。