无法使用片段从MySQL检索数据

时间:2016-06-22 19:43:33

标签: php android mysql json android-fragments

我正在Android上编写一个应用程序,我正在使用片段和MySQL,JSON和PHP,但我无法使用数据检索ListView

我的片段:

 public class SecondFragment extends Fragment {

    String url = "http://192.168.1.76/Ws_v3/Select.php";
     ListView lv;
    public SecondFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        Toast.makeText(getContext(),":)",Toast.LENGTH_SHORT).show();
        // Inflate the layout for this fragment

        View myFragmentView = inflater.inflate(R.layout.activity_main, container, false);

    lv = (ListView) myFragmentView.findViewById(R.id.lv);
        final Downloader d = new Downloader(getActivity(), url,lv);
        d.execute();
        return inflater.inflate(R.layout.fragment_second, container, false);
    }

}

下载我的数据的类:

public class Downloader extends AsyncTask<Void,Integer,String> {
    Context c;
    String address;
    ListView lv;
    ProgressDialog pd;
    public Downloader(Context c, String address, ListView lv) {
        this.c = c;
        this.address = address;
        this.lv = lv;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd=new ProgressDialog(c);
        pd.setTitle("Fetch Data");
        pd.setMessage("Fetching Data...Please wait");
        pd.show();
    }
    @Override
    protected String doInBackground(Void... params) {
        String data=downloadData();
        return data;
    }
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        pd.dismiss();;
        if(s != null)
        {
            Parser p=new Parser(c,s,lv);
            p.execute();
        }else
        {
            Toast.makeText(c,"Unable to download data",Toast.LENGTH_SHORT).show();
        }
    }
    private String downloadData()
    {
        //connect and get a stream
        InputStream is=null;
        String line =null;
        try {
            URL url=new URL(address);
            HttpURLConnection con= (HttpURLConnection) url.openConnection();
            is=new BufferedInputStream(con.getInputStream());
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            StringBuffer sb=new StringBuffer();
            if(br != null) {
                while ((line=br.readLine()) != null) {
                    sb.append(line+"\n");
                }
            }else {
                return null;
            }
            return sb.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(is != null)
            {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

和我的解析器:

public class Parser extends AsyncTask<Void,Integer,Integer> {

    Context c;
    ListView lv;
    String data;

    ArrayList<String> players=new ArrayList<>();
    ProgressDialog pd;

    public Parser(Context c, String data, ListView lv) {
        this.c = c;
        this.data = data;
        this.lv = lv;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pd=new ProgressDialog(c);
        pd.setTitle("Parser");
        pd.setMessage("Parsing ....Please wait");
        pd.show();
    }

    @Override
    protected Integer doInBackground(Void... params) {

        return this.parse();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);

        if(integer == 1)
        {
            //ADAPTER
            ArrayAdapter<String> adapter=new ArrayAdapter<String>(c,android.R.layout.simple_list_item_1,players);

            //ADAPT TO LISTVIEW
            lv.setAdapter(adapter);//AndroidStudio says that this is the line with error

            //LISTENET
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Snackbar.make(view,players.get(position),Snackbar.LENGTH_SHORT).show();;
                }
            });

        }else
        {
            Toast.makeText(c,"Unable to Parse",Toast.LENGTH_SHORT).show();
        }

        pd.dismiss();
    }

    //PARSE RECEIVED DATA
    private int parse()
    {
        try
        {
            //ADD THAT DATA TO JSON ARRAY FIRST
            JSONArray ja=new JSONArray(data);

            //CREATE JO OBJ TO HOLD A SINGLE ITEM
            JSONObject jo=null;

            players.clear();

            //LOOP THRU ARRAY
            for(int i=0;i<ja.length();i++)
            {
                jo=ja.getJSONObject(i);

                //RETRIOEVE NAME
                String name=jo.getString("nombre");

                //ADD IT TO OUR ARRAYLIST
                players.add(name);
            }

            return 1;

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

        return 0;
    }
}

我的片段XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- Parte superior -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="50">

        <ImageView
            android:id="@+id/cabecera"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="30"
            android:layout_marginBottom="28dp"
            android:background="@drawable/material_design_17"/>

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/fab"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_gravity="bottom|right"
            android:src="@android:drawable/ic_menu_edit"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"/>

        <TextView
            android:id="@+id/titulo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Titulo"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:layout_marginBottom="48dp"
            android:layout_toRightOf="@+id/fab"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="16dp"
            android:textColor="@android:color/white" />

    </RelativeLayout>


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="70"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

        <include layout="@layout/content_secondfragment" />

    </RelativeLayout>

My Content of fragment:



     <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
            <TextView
                android:padding="5dp"
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Players List!" />
            <ListView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/lv"
                android:layout_below="@+id/textView"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />
        </RelativeLayout>

好吧,我的错误是:

  

java.lang.NullPointerException:尝试调用虚方法'void   android.widget.ListView.setAdapter(android.widget.ListAdapter)'上的一个   null对象引用                                                                                              在   com.example.promindsoft.theprodigyeye.Parser.onPostExecute(Parser.java:65)                                                                                              在   com.example.promindsoft.theprodigyeye.Parser.onPostExecute(Parser.java:24)                                                                                              在android.os.AsyncTask.finish(AsyncTask.java:636)                                                                                              在android.os.AsyncTask.access $ 500(AsyncTask.java:177)                                                                                              在   android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:653)                                                                                              在android.os.Handler.dispatchMessage(Handler.java:102)                                                                                              在android.os.Looper.loop(Looper.java:135)                                                                                              在android.app.ActivityThread.main(ActivityThread.java:5910)                                                                                              at java.lang.reflect.Method.invoke(Native Method)                                                                                              在java.lang.reflect.Method.invoke(Method.java:372)                                                                                              在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1405)                                                                                              在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

请帮助我,这是一个在学院进行最终测试的项目。

0 个答案:

没有答案