2013-05-14 16 views
0

我在這裏有這段代碼,現在,我只是能夠發送值參數,我不能發送其他人。關於httpost問題,發送多個變量

我應該怎麼做才能發送editText類型的其他值? 即我希望能夠派:mbiemer與httpost方法......但如何..

感謝

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home_layout); 
    value=(EditText)findViewById(R.id.editText1); 
    mbiemer=(EditText)findViewById(R.id.msgMbiemer); 
    telefon=(EditText)findViewById(R.id.msgTelefon); 
    adresa=(EditText)findViewById(R.id.msgAdresa); 
    ora=(EditText)findViewById(R.id.msgOra); 
    per=(EditText)findViewById(R.id.msgPer); 
    dyqan=(EditText)findViewById(R.id.msgDyqan); 
    statusi=(EditText)findViewById(R.id.msgStatusi); 

    btn=(Button)findViewById(R.id.button1); 
    pb=(ProgressBar)findViewById(R.id.progressBar1); 
    pb.setVisibility(View.GONE); 
    btn.setOnClickListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if(value.getText().toString().length() < 1) { 
     // out of range 
     Toast.makeText(this, "please enter something", Toast.LENGTH_LONG).show(); 
    } else { 
     pb.setVisibility(View.VISIBLE); 
     new MyAsyncTask().execute(value.getText().toString()); 
    } 
} 

private class MyAsyncTask extends AsyncTask<String, Integer, Double> { 

    @Override 
    protected Double doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     postData(params[0]); 
     return null; 
    } 

    protected void onPostExecute(Double result){ 
    pb.setVisibility(View.GONE); 
    Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show(); 
} 

protected void onProgressUpdate(Integer... progress){ 
    pb.setProgress(progress[0]); 
} 

public void postData(String valueIWantToSend) { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://192.168.10.28/app/app1.php"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend)); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
} 

} 
} 

回答

1

無法發送mbiemer因爲你不發送它

將代碼更改爲此

public void postData() { 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://192.168.10.28/app/app1.php"); 

try { 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("myHttpData", value.getText().toString())); 
    nameValuePairs.add(new BasicNameValuePair("mbiemer", mbiemer.getText().toString())); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
} 

並調用postData();在你的doInBackground

+0

這是如此完美:) 謝謝 – alandr 2013-05-14 14:12:11

2

我應該按順序發送EDITTEXT 的其他值做什麼類型?

您可以使用任何數據結構,如ArrayList訪問doInBackground中的值。第二種選擇是,你可以使用Varargs作爲傳遞所有參數的順序進行AsyncTask.execute()

new MyAsyncTask().execute(value.getText().toString(), 
      mbiemer.getText().toString(), 
      telefon.getText().toString(),...); 

現在使用指數作爲doInBackground檢索所有值:

@Override 
protected Double doInBackground(String... params) { 
// TODO Auto-generated method stub 

String str_value=params[0]; 
String str_mbiemer=params[1]; 
String str_telefon=params[2]; 
..... 
postData(params[0]); 
return null; 
} 
+0

感謝您的回覆... 所以,直到這裏沒事,我明白了..但我怎麼能發佈它在這裏:nameValuePairs.add(new BasicNameValuePair(「myHttpData」,valueIWantToSend)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); – alandr 2013-05-14 14:08:28

+0

我應該做postData(params [0]); POSTDATA(PARAMS [1]); POSTDATA(PARAMS [2]);等等等? – alandr 2013-05-14 14:08:51

+0

@alandr:你想發送所有這些值與網址?然後在postData中傳遞這些值作爲'postData(params [0],params [1],params [2],..)',並在'postData'方法中將'nameValuePairs'中的值添加爲:'nameValuePairs.add(new BasicNameValuePair(「param0」,params [0])); nameValuePairs.add(new BasicNameValuePair(「param1」,params [1]));,....' – 2013-05-14 14:13:04