2013-03-16 39 views
12

Tôi hiện đang cố gắng lấy dữ liệu qua cuộc gọi REST API, phân tích cú pháp thông tin tôi cần và sau đó chuyển thông tin đó đến hoạt động mới . Tôi đang sử dụng máy khách HTTP không đồng bộ từ loopj.com cho máy khách REST và sau đó sử dụng mã bên dưới cho các hoạt động hiện tại và tương lai của tôi onClickonCreate.Chuyển dữ liệu từ hoạt động này sang hoạt động khác bằng cách sử dụng bó - không hiển thị trong hoạt động thứ hai

Eclipse không chuyển cho tôi bất kỳ lỗi nào cho bất kỳ mã nào của tôi, nhưng khi tôi cố chạy trong trình mô phỏng, tôi không nhận được gì (ví dụ: màn hình trắng trống) khi hoạt động/chế độ xem mới mở. Tôi đã cố gắng để mã với một URL khác nhau trong REST KHÁCH HÀNG của tôi, nhưng tôi vẫn thấy không có gì. Tôi thậm chí đã thực hiện cuộc gọi API ra khỏi phương trình bằng cách nhận xét thử/nắm bắt trong onClick và thay đổi venueName trong số bundle.putString("VENUE_NAME", venueName); thành searchTerm. Tuy nhiên, chế độ xem mới xuất hiện nhưng không có gì được hiển thị. Những gì không được thông qua, hoặc những gì tôi quên để làm cho hoạt động thứ hai cho thấy 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); 
} 

Phương pháp trong hoạt động thứ hai sẽ nhận được mục đích và bó và hiển thị nó:

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

Nhờ sự giúp đỡ của bạn. Rất nhiều đánh giá cao.

Trả lời

10

Hai cách để bạn có thể gửi dữ liệu. Đây là cách bạn đang gửi nó vào lúc này. Và không có gì sai với nó.

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

Trong mã bạn (Hoạt động thứ hai) Tuy nhiên, bạn đang đề cập đến key trong Gói như MainActivity.VENUE_NAME nhưng không có gì trong đoạn code gợi ý rằng bạn có một lớp học mà trả về giá trị là thực tế key tên gửi với Bundle. Thay đổi mã của bạn trong Hoạt động thứ hai này:

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

Bạn có thể kiểm tra trong Hoạt động thứ hai của bạn nếu Bundle chứa chìa khóa sử dụng này và bạn sẽ biết rằng key là không có mặt trong Bundle. Tuy nhiên, điều chỉnh ở trên sẽ giúp nó hoạt động cho bạn.

if (bundle.containsKey(MainActivity.VENUE_NAME)) { 
    .... 
} 
+1

Đây là một câu trả lời rất ngắn gọn nhưng đầy đủ chi tiết. Cảm ơn bạn đã viết lên rất rõ ràng. Nó giúp tôi hiểu cách sử dụng bó rất nhanh. – raddevus

+0

Cảm ơn. Ví dụ đã giúp tôi. – Edwinfad

0

Đảm bảo Chuỗi bạn đã sử dụng làm khóa để đưa mục vào Gói của bạn giống với khóa được sử dụng để trích xuất nó. Trong trường hợp của bạn, có lẽ MainActivity.VENUE_NAME không giống với "VENUE_NAME"

1

để gửi gói.

Bundle bundle = new Bundle(); 
bundle.putString("Name",Object); //This is for a String 
i.setClass(CurrentClass.this, Class.class); 
i.putExtras(bundle); 
startActivity(i); 

nhận bó

Bundle bundle = null; 
bundle = this.getIntent().getExtras(); 
String myString = bundle.getString("Name");//this is for String 
+0

Đây là "i". Vui lòng giải thích Ý nghĩa của tôi –

+0

Nếu bạn xác định Intent i = new Intent(); Tôi đã thử điều này Vui lòng giải thích Câu trả lời của bạn –

2

Bạn đang truy cập sai khóa mà bạn đã thêm vào trong gói.Bên cạnh đó nhận được String như MainActivity.VENUE_NAME cố gắng trực tiếp vượt qua các tên key mà bạn đã thêm vào trong bó như sau:

Bên cạnh đó nhận được chuỗi như sau:

//Get the bundle 
    Bundle bundle = getIntent().getExtras(); 
    //Extract the data… 
    String venName = bundle.getString(MainActivity.VENUE_NAME);   

Cố gắng để có được những chuỗi sử dụng khóa đặt tên như sau:

/Get the bundle 
    Bundle bundle = getIntent().getExtras(); 
    //Extract the data… 
    String venName = bundle.getString("VENUE_NAME"); 
4

tôi nghĩ nếu bạn thay thế

String venName = bundle.getString(MainActivity.VENUE_NAME); 

với

String venName = bundle.getString("VENUE_NAME"); 

cần làm việc.

Dưới đây là cách tôi xử lý chuyển nhượng của tôi về dữ liệu từ một hoạt động khác:

gửi dữ liệu đến hoạt động gọi là "Projectviewoptions":

Bundle b = new Bundle(); 
      b.putString("id", str_projectid); 
      Projectviewoptions pv = new Projectviewoptions(); 

Tiếp nhận dữ liệu:

idbundle = getArguments(); 
String myid = idbundle.getString("id"); 

Các "khóa" trên cả hai mặt phải giống nhau; trong trường hợp này là "id".

Một cách khác để gửi dữ liệu, thông qua ý định là:

Gửi:

Intent intent = new Intent(getActivity(),ViewProjectDetails.class); 
          intent.putExtra("id", myid); 
          startActivity(intent); 

Nhận các:

String id = getIntent().getExtras().getString("id"); 
0

Ý định loginIntent = new Intent (LoginActivity.this, HomeActivity. lớp học);

Bó bó = Gói mới();

bundle.putString ("user_id", userId);

i.putExtras (bó);

startActivity (loginIntent);

LoginActivity.this.finish();

Các vấn đề liên quan