Передача данных из одной активности в другую с помощью пакета - не отображение во второй активности
В настоящее время я пытаюсь получить данные, полученные с помощью вызова REST API, проанализировать его для необходимой мне информации и затем передать эту информацию в новое действие. Я использую Asynchronous HTTP Client из loopj.com для клиента REST, а затем используя приведенный ниже код для onClick
и onCreate
для текущей и будущей деятельности, соответственно.
Eclipse не передает мне никаких ошибок для моего кода, но когда я пытаюсь запустить эмулятор, я ничего не получаю (то есть пустой белый экран), когда открывается новый вид активности/представления. Я пробовал код с другим URL-адресом в моем REST CLIENT, но я все еще ничего не вижу. Я даже вынул API из уравнения, комментируя try/catch в onClick
и меняя venueName
в bundle.putString("VENUE_NAME", venueName);
на searchTerm
. Тем не менее, новый вид появляется, но ничего не отображается. Что не проходит, или что я забываю сделать, чтобы второе действие отображало venueName
?
public void onClick(View view) {
Intent i = new Intent(this, ResultsView.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String searchTerm = editText.getText().toString();
//call the getFactualResults method
try {
getFactualResults(searchTerm);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Create the bundle
Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("VENUE_NAME", venueName);
//Add the bundle to the intent
i.putExtras(bundle);
//Fire the second activity
startActivity(i);
}
Метод во второй активности, который должен получить намерение и расслоение и отобразить его:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get the message from the intent
//Intent intent = getIntent();
//String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
//Get the bundle
Bundle bundle = getIntent().getExtras();
//Extract the data…
String venName = bundle.getString(MainActivity.VENUE_NAME);
//Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(venName);
//set the text view as the activity layout
setContentView(textView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
Спасибо за вашу помощь. Очень ценится.
Ответы
Ответ 1
Два способа отправки данных. Вот как вы его отправляете в данный момент. И нет ничего плохого в этом.
//Create the bundle
Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("VENUE_NAME", venueName);
//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
Однако в вашем коде (вторая активность) вы ссылаетесь на key
в Bundle как MainActivity.VENUE_NAME
, но ничего в коде не указывает, что у вас есть класс, который возвращает значение в качестве фактического key
имени send с Bundle. Измените свой код во втором действии на это:
Bundle bundle = getIntent().getExtras();
//Extract the data…
String venName = bundle.getString("VENUE_NAME");
//Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(venName);
Вы можете проверить свое второе действие, если Bundle содержит ключ, используя это, и вы будете знать, что key
отсутствует в Bundle. Однако исправление, приведенное выше, заставит его работать для вас.
if (bundle.containsKey(MainActivity.VENUE_NAME)) {
....
}
Ответ 2
Я думаю, если вы замените
String venName = bundle.getString(MainActivity.VENUE_NAME);
с
String venName = bundle.getString("VENUE_NAME");
он должен работать.
Вот как я обрабатываю передачу данных из одной активности в другую:
Отправка данных в действие под названием "Projectviewoptions":
Bundle b = new Bundle();
b.putString("id", str_projectid);
Projectviewoptions pv = new Projectviewoptions();
Получение данных:
idbundle = getArguments();
String myid = idbundle.getString("id");
"Ключ" с обеих сторон должен быть таким же; в этом случае "id".
Другой способ отправить данные с помощью намерения:
Send:
Intent intent = new Intent(getActivity(),ViewProjectDetails.class);
intent.putExtra("id", myid);
startActivity(intent);
Recieve:
String id = getIntent().getExtras().getString("id");
Ответ 3
Вы ошибочно получаете доступ к ключу, который вы добавили в пакет. Помимо того, что String как MainActivity.VENUE_NAME
попытается напрямую передать имя ключа, которое вы добавили в пучок, как показано ниже:
Помимо строки, как показано ниже:
//Get the bundle
Bundle bundle = getIntent().getExtras();
//Extract the data…
String venName = bundle.getString(MainActivity.VENUE_NAME);
Попробуйте получить строку, используя имя ключа, как показано ниже:
/Get the bundle
Bundle bundle = getIntent().getExtras();
//Extract the data…
String venName = bundle.getString("VENUE_NAME");
Ответ 4
отправить пакет.
Bundle bundle = new Bundle();
bundle.putString("Name",Object); //This is for a String
i.setClass(CurrentClass.this, Class.class);
i.putExtras(bundle);
startActivity(i);
чтобы получить пакет
Bundle bundle = null;
bundle = this.getIntent().getExtras();
String myString = bundle.getString("Name");//this is for String
Ответ 5
Убедитесь, что строка, которую вы использовали в качестве ключа, чтобы поместить элемент в свой комплект, совпадает с ключом, используемым для его извлечения. В вашем случае, возможно, MainActivity.VENUE_NAME
не совпадает с "VENUE_NAME"
Ответ 6
Intent loginIntent = new Intent(LoginActivity.this, HomeActivity.class);
Bundle bundle = new Bundle();
bundle.putString("user_id", userId);
i.putExtras(bundle);
startActivity(loginIntent);
LoginActivity.this.finish();
Ответ 7
Вы можете использовать этот код в первом упражнении:
Intent i = new Intent(Context, your second.class);
i.putExtra("key_value", "your object");
startActivity(i);
и получить объект во второй деятельности:
Intent in = getIntent();
Bundle content = in.getExtras();
// check null
if (content != null) {
String content = content_search.getString("key_value");
}