2015-12-19 34 views
0

我有一个活性1使用putExtra,如下所示,其将数据发送到活性2:使用数据由活动1在活动发送2

public void onClick(View v) { 
       String itemspi = spinnerFood.getSelectedItem().toString(); 
       Intent i = new Intent(getApplicationContext(),Activity2.class); 
       i.putExtra("data",itemspi); 
       startActivity(i); 
       setContentView(R.layout.activity2_layout); 
      } 

我在活性2接收该数据,如下:

Intent i = getIntent(); 
    String spidata = i.getExtras().getString("data"); 

在Activity2中,我在做AsyncTask来推送MySql数据库中的数据(我从Activity1接收到的数据)和ID(在Activity2本地生成),如下所示:

新的AsyncTask(){

 @Override 
     protected Void doInBackground(Void... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("tagID", ID1)); 
      params.add(new BasicNameValuePair("subject", spidata)); 
      // getting JSON Object 
      // Note that create product url accepts POST method 
      JSONObject json = jsonParser.makeHttpRequest(url_create_att, 
        "POST", params); 

      // check log cat fro response 
      Log.d("Create Response", json.toString()); 

      // check for success tag 
      try { 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // successfully created product 
        Intent i1 = new Intent(getApplicationContext(), Activity2.class); 
        startActivity(i1); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), "Student Present", Toast.LENGTH_LONG).show(); 
         } 
        }); 

        // closing this screen 
        finish(); 
       } else { 
        // failed to create product 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show(); 
         } 
        }); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    }.execute(); 

当我推数据(ID和数据从Activy1接收的),该数据被成功地插入到数据库中(使用pgAdmin的检查),但是该应用程序崩溃与下列错误:

注: TagViewer(误差的3号线)是我活性2

楼下可以看到一个错误的onCreate:

enter image description here

这指的是这行代码:

spidata = i.getExtras().getString("data"); 

所以我的猜测是,当我完成推送数据到数据库中,我说:

if (success == 1) { 
         // successfully created product 
         Intent i1 = new Intent(getApplicationContext(), Activity2.class); 
         startActivity(i1); 
} 

这需要控制回到onCreate方法,并尝试获取意图数据,但失败,所以应用程序崩溃(我猜可能是错误的)。

我需要保存意图数据(从Activity1发送),以便用户可以在进一步的迭代中将数据(从Activity1发送)和新的ID(在Activity2中本地生成的)推送到数据库中。

请帮帮我!

回答

1

要重新再次启动活性2中的数据,你需要再次到意图添加数据里面的AsyncTask()

Intent i1 = new Intent(getApplicationContext(), Activity2.class); 
    i1.putExtra("data",spidata); 
    startActivity(i1); 
+0

不可以。我想在Activity2中保存意图数据,直到用户在该页面上。 –

+0

请参阅更新后的答案,在AsyncTask函数中启动Activity2而不使用任何意图数据。 – SachinS

+0

非常感谢兄弟。这是一件很简单的事:) –

1

在启动活动后删除setContentView(R.layout.activity2_layout);并放入活动2的onCreate内。

而获得的数据来自意图是这样的:

活动2

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

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     String spidata = i.getExtras().getString("data"); 
    } 
} 
+0

由于这个固定的崩溃,但我需要的是意图数据从活动1发送下一个迭代也。不知何故需要保存所有迭代的意图数据。 –

0

首先从活动1删除此行setContentView(R.layout.activity2_layout);,然后接受活性2

使用此代码数据
Intent i = getIntent(); 
     extras = i.getExtras(); 
     String spidata = extras.getString("data"); 
+0

谢谢我这样做,但我需要保存从Activity1发送的意图数据,以便将它推入数据库进行第二次迭代。 –

0

进行中的活动1到活动2

http://developer.android.com/training/basics/firstapp/starting-activity.html

发送数据到MySQL

活性1

public class Activity1 extends AppCompatActivity { 
public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE"; 
..... 

btnRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      registerUser(); 
     } 
    }); 

protected void registerUser() { 
String name = Ename.getEditText().getText().toString(); 
register(name); 
} 

private void register(String name) { 
    // TODO Auto-generated method stub 
    class ABC extends AsyncTask<String, Void, String>{ 
     ProgressDialog loading; 
     ServiceHandler ruc = new ServiceHandler(); 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loading = ProgressDialog.show(Activity1.this, "Please Wait",null, true, true); 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      loading.dismiss(); 
      if(s.equalsIgnoreCase("Successfully registered")){ 
       Intent intent = new Intent(Activity1.this, Activity2.class); 
       intent.putExtra(EXTRA_MESSAGE, name); 
       startActivity(intent); 
       finish(); 
       Toast.makeText(getApplicationContext(), "Successfully registered", Toast.LENGTH_SHORT).show(); 
      }else{ 
       Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); 
      }     
     } 

     @Override 
     protected String doInBackground(String... params) { 

      HashMap<String, String> data = new HashMap<String,String>(); 
      data.put("name",params[0]); 

      String result = ruc.sendPostRequest("Your url",data); 

      return result; 
     } 
    } 

    ABC ru = new ABC(); 
    ru.execute(name); 
} 

的ServiceHandler

public class ServiceHandler { 

public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) { 

    URL url; 
    String response = ""; 
    try { 
     url = new URL(requestURL); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 


     OutputStream os = conn.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 
     writer.write(getPostDataString(postDataParams)); 

     writer.flush(); 
     writer.close(); 
     os.close(); 
     int responseCode=conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      response = br.readLine(); 
     } 
     else { 
      response="Error Registering"; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 

private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException { 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 
    for(Map.Entry<String, String> entry : params.entrySet()){ 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 
} 

活性2

Intent intent = getIntent(); 
String name = intent.getStringExtra(Activity1.EXTRA_MESSAGE); 
TextView textView = (TextView)findViewById(R.id.text); 
textView.setText(name);