samedi 18 juin 2016

Not receiving data from MySQL database to Android Recyclerview

I'm working on an amusement park record application that receives data from MySQL database and displays on recyclerview in android but im unable to download it from database.

This is my Adapter

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
Context c;
ArrayList<String> swing;

public MyAdapter(Context c,ArrayList<String>swing){
    this.c=c;
    this.swing=swing;
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card_ticketsold,parent,false);
    MyHolder holder=new MyHolder(v);

    return holder;
}

@Override
public void onBindViewHolder(MyHolder holder, int position) {
    holder.nameTxt.setText(swing.get(position));
    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onItemClick(int pos) {
            Toast.makeText(c,swing.get(pos),Toast.LENGTH_SHORT).show();
        }
    });

}

@Override
public int getItemCount() {
    return swing.size();
}

}

this is my holder:

public class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView nameTxt;
ItemClickListener itemClickListener;

public MyHolder(View itemView) {
    super(itemView);

    nameTxt= (TextView) itemView.findViewById(R.id.swing_name_ticket_sold_text);

    itemView.setOnClickListener(this);
}


public void setItemClickListener(ItemClickListener ic)
{
    this.itemClickListener=ic;
}

@Override
public void onClick(View v) {
    this.itemClickListener.onItemClick(getLayoutPosition());
}

}

This is the fragment containing the recyclerview:

public class TicketSoldFragment extends Fragment {
Button press;

String url="http:// 10.0.2.2/data/ticketsold_show_swing.php";

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView=inflater.inflate(R.layout.fragment_ticketsold,container,false);
    return rootView;

}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    final RecyclerView rv=(RecyclerView)view.findViewById(R.id.recyclerview_ticketsold);
    rv.setLayoutManager(new LinearLayoutManager(getContext()));
    rv.setItemAnimator(new DefaultItemAnimator());
    Context c=getActivity().getApplicationContext();

    press=(Button)view.findViewById(R.id.buttonplease);

    press.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Downloader d=new Downloader(getActivity(),url,rv);
            d.execute();
        }
    });

}

}

this is downloader:

public class Downloader extends AsyncTask<Void,Integer,String> {

Context c;
String stringURL;
RecyclerView rv;
ProgressDialog pd;

public Downloader(Context c, String stringURL, RecyclerView rv) {
    this.c= c;
    this.stringURL = stringURL;
    this.rv = rv;


}

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

    String data=this.downloadData();

    return data;
}

@Override
protected void onPostExecute(String data) {
    super.onPostExecute(data);

    pd.dismiss();
    if(data!=null)
    {
        Parser p=new Parser(c,data,rv);
        p.execute();
    }
    else {
        Toast.makeText(c,"Unable to download",Toast.LENGTH_SHORT).show();
    }
}

private String downloadData()
{
    InputStream is=null;
    String line=null;
    try
    {
        URL url=new URL(stringURL);
        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;
}


@Override
protected void onPreExecute() {
    super.onPreExecute();
    pd=new ProgressDialog(c);
    pd.setTitle("Download Data");
    pd.setMessage("Downloading...Please Wait!");
    pd.show();
}

}

and Parser:

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

Context c;
String data;
RecyclerView rv;

ProgressDialog pd;
ArrayList<String> swings=new ArrayList<>();
MyAdapter adapter;

public Parser(Context c, String data, RecyclerView rv) {
    this.c = c;
    this.data = data;
    this.rv = rv;
}

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

    pd=new ProgressDialog(c);
    pd.setTitle("Parse Data");
    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);

    pd.dismiss();

    if(integer==1)
    {
        adapter=new MyAdapter(c,swings);
        rv.setAdapter(adapter   );
    }
    else
    {
        Toast.makeText(c,"Unable to parse data",Toast.LENGTH_SHORT).show();
    }
}

private int parse()
{
    try{
        JSONArray ja=new JSONArray(data);
        JSONObject jo=null;
        swings.clear();

        for(int i=0;i<ja.length();i++)
        {
            jo=ja.getJSONObject(i);
            String name=jo.getString("name");
            swings.add(name);
        }
        return 1;

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

}

when i run this, the Toast "Unable to download" appears...so my data is not downloaded at all! and there is an error in logcat "no network" and sendUserActionEvent() mView == null

Aucun commentaire:

Enregistrer un commentaire