4

全部,

我有一个小型功能应用程序,它根据 buttonclick 发送的用户输入向服务器发出 httprequest。我正在寻找一些帮助,使我的小应用程序与 SDK 11+ 兼容,方法是将此 httprequest 设为异步任务。

我花了几天时间阅读异步任务,了解原理,以及使 httprequest 远离 UI 线程的原因。

但是我只是无法让代码在我的情况下工作。我什至无法编译它。我已经包含在我的功能代码下面(即在尝试使 httprequest 异步之前)

我会非常感谢一些具体的帮助。我为我的垃圾代码道歉,并且已经回答了这个问题的变体。

在此先感谢杰米

我的 MainActivity 代码如下:

package com.jrcdesign.ebookbeamer;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.Spinner;
import android.view.View.OnClickListener;


public class MainActivity extends Activity {

Button sendButton;
Button btnSubmit;
EditText msgTextField;
EditText msg2TextField;
Spinner spinner1;

/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    // load the layout
    setContentView(R.layout.main);        

    // make message text field object
    msgTextField = (EditText) findViewById(R.id.msgTextField);
    msg2TextField = (EditText) findViewById(R.id.msg2TextField);

    // make send button object
    sendButton = (Button) findViewById(R.id.sendButton);
    btnSubmit = (Button) findViewById(R.id.btnSubmit);    
    addListenerOnButton();
    addListenerOnSpinnerItemSelection(); 

}            

    public void addListenerOnSpinnerItemSelection() {
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());
    }

    // get the selected dropdown list value
    public void addListenerOnButton() {

    spinner1 = (Spinner) findViewById(R.id.spinner1);
    btnSubmit = (Button) findViewById(R.id.btnSubmit);

    btnSubmit.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {

        Toast.makeText(MainActivity.this,
        "OnClickListener : " + 
                  "\nSpinner 1 : "+ String.valueOf(spinner1.getSelectedItem()),
            Toast.LENGTH_SHORT).show();

      msgTextField.setText("" + String.valueOf(spinner1.getSelectedItem()));

      }

    });
    }


    // Called when the SEND button is pressed
    // Need to make this an async task

    public void send(View v)
{
   // get the message from the message text box
    msgTextField.setText("" + String.valueOf(spinner1.getSelectedItem()));
    String msg = msgTextField.getText().toString();  
    String msg2 = msg2TextField.getText().toString();  

    if (msg.length()>0)
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://54.235.198.96/test1.php");
     try {
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
       nameValuePairs.add(new BasicNameValuePair("id", msg2));
       nameValuePairs.add(new BasicNameValuePair("message", msg));
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

       httpclient.execute(httppost);
       msgTextField.setText(""); // clear text box
       msg2TextField.setText(""); // clear text box

       Toast.makeText(MainActivity.this,
                "Your request is being processed",
                    Toast.LENGTH_LONG).show();

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

    }
    else
    {
        // display message if text fields are empty
        Toast.makeText(getBaseContext(),"All fields are required",Toast.LENGTH_SHORT).show();
    }

}

}
4

1 回答 1

1

这是您的异步​​类:

private class AsyncTaskDownloadSomething extends
        AsyncTask<String[], String, String> {

    DataClassLentABook  mData;





    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Do some prepartations over here, before the task starts to execute
        //Like freeze the button and/or show a progress bar


    }





    @Override
    protected String doInBackground(String... urls) {
        // Task starts executing.
        String url = urls[0];

        // Execute HTTP requests here, with one url(urls[0]),
        // or many urls using the urls table
        // Save result in myresult

        return myresult;

    }





    protected void onPostExecute(String result) {
               //Do modifications you want after everything is finished
               //Like re-enable the button, and/or hide a progressbar
               //And of course do what you want with your result got from http-req



    }
}

要执行你的异步任务,当你的按钮被点击时,只需要这样写:

new AsyncTaskDownloadSomething().execute(someURL);
于 2013-01-06T23:36:35.870 回答