Как отправить динамические данные из одной активности в другую в android

Я разрабатываю приложение для Android, где я получаю данные из базы данных mysql и отображаю их в Listview. У меня есть данные «Категории», такие как «Телеком», «Банкинг», «Социальные сайты» и т. Д. Эта категория, получаемая из mysql, отлично отображается в ListView. Теперь, когда я нажимаю на кого-либо из них, он должен перейти к следующему действию и отобразить данные в соответствии с этой категорией. Предположим, что я нажимаю «Социальные сайты», а затем в следующем мероприятии должны быть Google Plus, Instagram, Twitter и т. Д., И этот список будет поступать из базы данных и отображать в виде списка. Я не понимаю, как это сделать .. !!! Пожалуйста, помогите мне … Это мой код, что я сделал.

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; } } 

Это мой файл макета … !!!

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(); ?> в <?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(); ?> 

замещать

  i1.putExtra("CompName", CompName); 

от

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

Затем получите эти данные в следующем действии и извлеките данные из БД в зависимости от переданного значения.

Вы должны передать значение, которое выбрал пользователь. Таким образом, все ваши значения находятся в вашем адаптере r и вы узнаете, какой из них выбран пользователем по выбранной позиции, что является третьим параметром onItemClick . Таким образом, это должно быть r[position] . Лучше полностью заполнить адаптер, прежде чем устанавливать его в ListView. Получите все данные из JSON, добавьте их в адаптер и затем установите этот адаптер в ListView.

Попробуйте использовать AsyncTasks, вот документация: http://developer.android.com/reference/android/os/AsyncTask.html.

попробуйте это, вам нужно использовать опцию add to Intent и отправить данные в другую деятельность и получить ее на onCreate в следующем действии

  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); } }); 

следующая деятельность

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

Попробуйте этот путь, надеюсь, что это поможет вам решить вашу проблему.

 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); } } -1 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); } }