Async Http post请求无效

时间:2014-04-25 08:02:08

标签: java android http android-asynctask

我正在处理一个应用程序。我坚持要发出http post请求,我必须使用Async任务,因为我的主要工作是服务。我在网上看,我得到了一段代码,我修改了一下,但它不起作用。

public class MainActivity extends Activity implements OnClickListener{

private EditText value;
private Button btn;
private ProgressBar pb;
private EditText t1;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_layout);
    value=(EditText)findViewById(R.id.editText1);
    t1= (EditText) findViewById(R.id.editText2);
    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();
        t1.setText("asdas");
        HttpPost httppost = new HttpPost("http://www.cise.ufl.edu/~rrohit/cps/test.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
        }
    }

}

}

log cat

04-25 04:13:38.020: W/dalvikvm(909): threadid=11: thread exiting with uncaught exception (group=0xb1ae7ba8)
04-25 04:13:38.510: E/AndroidRuntime(909): FATAL EXCEPTION: AsyncTask #1
04-25 04:13:38.510: E/AndroidRuntime(909): Process: com.example.asynhttp, PID: 909
04-25 04:13:38.510: E/AndroidRuntime(909): java.lang.RuntimeException: An error occured while executing doInBackground()
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.lang.Thread.run(Thread.java:841)
04-25 04:13:38.510: E/AndroidRuntime(909): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:857)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.view.View.invalidate(View.java:10878)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.invalidateRegion(TextView.java:4651)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.invalidateCursor(TextView.java:4594)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.spanChange(TextView.java:7502)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:9210)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:979)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:688)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.Selection.setSelection(Selection.java:76)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.Selection.setSelection(Selection.java:87)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.setText(TextView.java:3801)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.setText(TextView.java:3671)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.EditText.setText(EditText.java:80)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.widget.TextView.setText(TextView.java:3646)
04-25 04:13:38.510: E/AndroidRuntime(909):  at com.example.asynhttp.MainActivity$MyAsyncTask.postData(MainActivity.java:87)
04-25 04:13:38.510: E/AndroidRuntime(909):  at com.example.asynhttp.MainActivity$MyAsyncTask.doInBackground(MainActivity.java:72)
04-25 04:13:38.510: E/AndroidRuntime(909):  at com.example.asynhttp.MainActivity$MyAsyncTask.doInBackground(MainActivity.java:1)
04-25 04:13:38.510: E/AndroidRuntime(909):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-25 04:13:38.510: E/AndroidRuntime(909):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-25 04:13:38.510: E/AndroidRuntime(909):  ... 4 more
04-25 04:13:38.960: W/ActivityManager(383):   Force finishing activity com.example.asynhttp/.MainActivity

1 个答案:

答案 0 :(得分:1)

您无法从运行AsyncTask doInBackground()的后台线程触摸UI视图。具体来说,删除它:

t1.setText("asdas");

另请考虑至少在e.printStackTrace()块中添加catch,以免隐藏try块中的问题。