简体   繁体   中英

How to send dynamic data from one activity to another in android

I am developing an android application where I am getting data from mysql database and displaying that in Listview. I have data "Categories" like Telecom, Banking, Social Sites and so on. This Category getting from mysql, is displaying in ListView perfectly. Now when I click on any one of them, then this should move to next activity and display data according to that category. Suppose I click on Social Sites, then on next activity, the data should be Google Plus, Instagram, Twitter etc and this list will come from Database and display in listview. I am not getting any idea about this how to do that..!!! Please help me...This is my code what I've done.

Welcome.java

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class Welcome extends Activity 
{
    TextView text;
    //Button b1,b2,b3;
    String CompName,CompID;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

      //  b1=(Button)findViewById(R.id.dashboard_tab1);
      //  b1.setOnClickListener(this);

        connect();
    }

    public void connect() 
    {
        String data;
        List<String> r = new ArrayList<String>();
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);
        ListView list=(ListView)findViewById(R.id.list);
        try 
        {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet("http://10.0.2.2/database/Retrive.php");
                HttpResponse response = client.execute(request);
                HttpEntity entity=response.getEntity();
                data=EntityUtils.toString(entity);
                Log.e("STRING", data);

                try 
                {
                   JSONArray json=new JSONArray(data);
                   for(int i=0;i<json.length(); i++)
                   {
                        JSONObject obj=json.getJSONObject(i);

                        CompName=obj.getString("fldCompName");
                        CompID=obj.getString("fldCompID");

                        Log.e("STRING", CompName);
                        Log.e("STRING",CompID);

                        r.add(CompName);
                        //r.add(CompID);
                        list.setAdapter(adapter);

                        list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() 
                        {
                            @Override
                            public void onItemClick(AdapterView<?> parent,View view, int position, long id) 
                            {
                                Intent i1=new Intent(Welcome.this,Category1.class);
                                i1.putExtra("CompName", CompName);
                                startActivity(i1);
                            }
                        });
                   }
                } 
                catch (JSONException e) 
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (ClientProtocolException e) {
                Log.d("HTTPCLIENT", e.getLocalizedMessage());
            } catch (IOException e) {
                Log.d("HTTPCLIENT", e.getLocalizedMessage());
            }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.welcome, menu);
        return true;
    }
}

This is my layout file...!!!

activity_welcome.xml

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

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg" >
</ListView>

</LinearLayout>

Retrive.php

<?php

    $host='localhost';
    $uname='root';
    $pwd='';
    $db='database';

    $con=mysqli_connect($host,$uname,$pwd) or die("Connection Failed");
        mysqli_select_db($con,$db) or die("database selection failed");

    $sql=mysqli_query($con,"select fldCompName,fldCompID from tblCompanies where fldStatus='1'");
    while($row=mysqli_fetch_assoc($sql))
    $output[]=$row;
    $a=json_encode($output);
    print($a);
    mysqli_close();

?>

Replace

 i1.putExtra("CompName", CompName);

by

 i1.putExtra("CompName", r[position]);

Then get this data in the next activity and fetch the data from DB depending on the passed value.

You have to pass the value which user has selected. So all your values are in your adapter r and you will get to know which one user has selected by item selected position, which is third parameter of onItemClick . So it should be r[position] . It's better to completely fill the adapter before setting it to ListView. So fetch all the data from JSON, add it to adapter and then set that adapter to ListView.

尝试使用AsyncTasks,这里是文档: http : //developer.android.com/reference/android/os/AsyncTask.html

try this, u have to use put extra's to Intent and send data to other activity and get it on the onCreate in the next activity

 listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int pos,
                long id) {
            SubCategoryModel scm = lstSubCategoryList.get(pos);
            Intent intent = new Intent(prestentactivity.this, nextactivity.class);
            intent.putExtra("ActivityKey", scm.getName());

            startActivity(intent);

        }


    });

next activity

Intent intent = getIntent();
 String Key= intent.getStringExtra("ActivityKey");

Try this way,hope this will help you to solve your problem.

public class Welcome extends Activity
{

    private ListView list;
    private ArrayAdapter<String> adapter;
    private ArrayList<HashMap<String,String>> data;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        list=(ListView)findViewById(R.id.list);

        list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent,View view, int position, long id)
            {
                Intent i1=new Intent(Welcome.this,Category1.class);
                i1.putExtra("CompName",data.get(position).get("CompName"));
                i1.putExtra("fldCompID",data.get(position).get("fldCompID"));
                startActivity(i1);
            }
        });
        getDataFromServer(new CallListener() {
            @Override
            public void onComplete(ArrayList<HashMap<String, String>> response) {
                data = response;
                String[] listItemArray = new String[data.size()];
                for (int i = 0; i < data.size(); i++) {
                    listItemArray[i] = data.get(i).get("CompName");
                }
                adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, listItemArray);
                list.setAdapter(adapter);
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.welcome, menu);
        return true;
    }

    public void getDataFromServer(final CallListener target){
        new AsyncTask<Void, Void, ArrayList<HashMap<String, String>>>() {
            ArrayList<HashMap<String,String>> data = new ArrayList<HashMap<String, String>>();
            @Override
            protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
                try {
                    DefaultHttpClient client = new DefaultHttpClient();
                    HttpGet request = new HttpGet("http://10.0.2.2/database/Retrive.php");
                    HttpResponse response = client.execute(request);
                    HttpEntity entity=response.getEntity();
                    Log.e("STRING", EntityUtils.toString(entity));


                    JSONArray json = new JSONArray(EntityUtils.toString(entity));

                    for (int i = 0; i < json.length(); i++) {
                        Log.e("STRING", json.getJSONObject(i).getString("fldCompName"));
                        Log.e("STRING", json.getJSONObject(i).getString("fldCompID"));

                        HashMap<String, String> row = new HashMap<String, String>();
                        row.put("CompName", json.getJSONObject(i).getString("fldCompName"));
                        row.put("fldCompID", json.getJSONObject(i).getString("fldCompID"));
                        data.add(row);
                    }
                }catch (Throwable e){
                    e.printStackTrace();
                }
                return data;
            }

            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
                super.onPostExecute(result);
                target.onComplete(result);

            }
        }.execute();
    }

    interface CallListener{
        public void onComplete(ArrayList<HashMap<String,String>> 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