我目前正在尝试通过REST API调用获取数据,解析它以获取我需要的信息,然后将该信息传递给新活动。我正在使用loopj.com的异步HTTP客户端作为REST客户端,然后分别使用以下代码为我的onClick
和onCreate
进行当前和未来的活动。
Eclipse没有为我的任何代码传递任何错误,但是当我尝试在模拟器中运行时,在新活动/视图打开时我什么也得不到(即空白屏幕)。我试图在我的REST CLIENT中使用不同的URL进行编码,但我仍然没有看到任何内容。我甚至通过在onClick
中注释try / catch并将venueName
中的bundle.putString("VENUE_NAME", venueName);
更改为searchTerm
来取消API调用。仍然,新视图出现但没有显示任何内容。什么没有通过,或者我忘记了第二个活动是什么显示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);
}
}
感谢您的帮助。非常感谢。
答案 0 :(得分:24)
您可以通过两种方式发送数据。这就是你现在发送它的方式。它并没有错。
//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);
在您的代码(第二个Activity)中,您将Bundle中的key
称为MainActivity.VENUE_NAME
,但代码中没有任何内容表明您有一个类将该值作为实际值返回{ {1}}使用Bundle发送名称。将第二个Activity中的代码更改为:
key
如果Bundle包含使用此密钥的密钥,您可以检入第二个Activity,并且您将知道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);
。然而,上面的修正将使它适合您。
key
答案 1 :(得分:5)
我想如果你替换
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”。
通过意图发送数据的另一种方式是:
发送:
Intent intent = new Intent(getActivity(),ViewProjectDetails.class);
intent.putExtra("id", myid);
startActivity(intent);
收到:
String id = getIntent().getExtras().getString("id");
答案 2 :(得分:3)
您错误地访问了您在捆绑中添加的密钥。除了将字符串作为MainActivity.VENUE_NAME
尝试直接传递您在bundle中添加的密钥名称,如下所示:
除了获得如下字符串:
//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");
答案 3 :(得分:1)
发送捆绑。
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
答案 4 :(得分:0)
确保您用作将项目放入Bundle的密钥的String与用于提取它的密钥相同。在您的情况下,MainActivity.VENUE_NAME
可能与“VENUE_NAME”
答案 5 :(得分:0)
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();
答案 6 :(得分:0)
package com.example.mytest;
import androidx.annotation.MainThread;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import static com.example.mytest.MainActivity.STATIC_VARIABLE;
public class MainActivity2 extends AppCompatActivity {
EditText editText1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
editText1 = (EditText) findViewById(R.id.editText1);
button1 = (Button) findViewById(R.id.button1);
Bundle extras=null;
extras=this.getIntent().getExtras();
if(extras!=null) {
String recieved =extras.getString("TAG");
editText1.setText(String.valueOf(recieved));
}
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent backIntent = new Intent(MainActivity2.this, MainActivity.class);
String input= editText1.getText().toString();
backIntent.putExtra("TAG2",input);
STATIC_VARIABLE=3;
// setResult(RESULT_OK,intent);
// startActivityForResult(intent, 2);
startActivity(backIntent);
}
});
}
}