我正在处理一个应用程序。我坚持要发出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
答案 0 :(得分:1)
您无法从运行AsyncTask doInBackground()
的后台线程触摸UI视图。具体来说,删除它:
t1.setText("asdas");
另请考虑至少在e.printStackTrace()
块中添加catch
,以免隐藏try
块中的问题。