有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java异步Http post请求不工作

我正在写一份申请书。我一直在做http post请求,我不得不使用异步任务,因为我的主要工作是在服务中。我在网上看了看,得到了一段代码,我做了一些修改,但它不起作用

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

}

}

原木猫

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 安卓.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 安卓.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: 安卓.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 安卓.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:857)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.view.View.invalidate(View.java:10878)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView.invalidateRegion(TextView.java:4651)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView.invalidateCursor(TextView.java:4594)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView.spanChange(TextView.java:7502)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:9210)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:979)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:688)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.Selection.setSelection(Selection.java:76)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.Selection.setSelection(Selection.java:87)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView.setText(TextView.java:3801)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.TextView.setText(TextView.java:3671)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.widget.EditText.setText(EditText.java:80)
04-25 04:13:38.510: E/AndroidRuntime(909):  at 安卓.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 安卓.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) 个答案

  1. # 1 楼答案

    不能从运行AsyncTaskdoInBackground()的后台线程中触摸UI视图。具体来说,删除以下内容:

    t1.setText("asdas");
    

    还考虑将至少{^ }添加到您的^ {CD3>}块中,这样就不会隐藏您的{{CD4}}块中的问题。