想实现一个简单的登录,
登录,可是不知道线程间关系,一直报错,因为链接服务器代码也写到UI线程里了,
想问的是,怎么样另外开一个线程实现android登录呢?
package wm.test;import java.util.ArrayList;import java.util.List;import org.apache.http.message.BasicNameValuePair;import wm.test.util.HttpPostUtil;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;/** * 登录页面 * * @author 梁皓 * */public class TestActivity extends Activity { private static final String TAG = "TestActivity"; private final int CODE = 1; private EditText username; private EditText pwd; HttpPostUtil hpu = new HttpPostUtil(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "open TestActivity"); setContentView(R.layout.main); /* * TextView registerLink = (TextView) findViewById(R.id.register_link); * registerLink.setMovementMethod(LinkMovementMethod.getInstance()); */ username = (EditText) findViewById(R.id.username_edit); pwd = (EditText) findViewById(R.id.password_edit); Button button = (Button) findViewById(R.id.signin_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { new Thread() { @Override public void run() { if (dologin()) { Intent intent = new Intent(); // Bundle bundle = new Bundle(); // bundle.putString("USERNAME", // username.getText().toString()); // intent.putExtras(bundle); intent.setClass(TestActivity.this, firstActivity.class); startActivityForResult(intent, CODE); finish(); } } }.start(); } }); Button btn = (Button) findViewById(R.id.test_num); btn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(TestActivity.this, "临时帐号!建议您注册成为网蜜会员。", 2000) .show(); Intent intent = new Intent(); intent.setClass(TestActivity.this, firstActivity.class); startActivityForResult(intent, 11); finish(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } protected void dialog() { AlertDialog.Builder builder = new Builder(TestActivity.this); builder.setMessage("确定要退出吗?"); builder.setTitle("提示"); builder.setPositiveButton("确认", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); TestActivity.this.finish(); } }); builder.setNegativeButton("取消", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { dialog(); return false; } return false; } public boolean dologin() { Log.d(TAG, "open dologin"); String u = username.getText().toString(); String p = pwd.getText().toString(); String url = "http://www.test.com/api/user/login.htm"; if (u != null && p != null) { List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>(); list.add(new BasicNameValuePair("un", u)); list.add(new BasicNameValuePair("upwd", p)); hpu.getHtml(url, list); return true; } return false; }}
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { new Thread() { @Override public void run() { if (dologin()) { handler.sendEmptyMessage(0); } } }.start(); } });
[解决办法]
anr问题