soapPrimitiveData()Can';t在未调用Looper.prepare()的线程内创建处理程序 公共类MainActivity扩展活动{ 私有文本用户名; 私人编辑文本通行证; 私有最终字符串命名空间=”http://tempuri.org/"; 私有最终字符串URL=”http://122.252.200.98/fts/registration.asmx"; 字符串用户标识; 字符串密码; 字符串tran=“2”; @凌驾 创建时的公共void(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 按钮符号=(按钮)findViewById(R.id.button1); signin.setOnClickListener(新的OnClickListener(){ 公共void onClick(视图v){ 用户名=(EditText)findViewById(R.id.editText1); user_id=username.getText().toString(); pass=(EditText)findViewById(R.id.editText2); password=pass.getText().toString(); 新登录任务().execute(); } }); } 私有布尔doLogin(字符串用户_id1,字符串密码1,字符串事务类型){ 布尔结果=假; 最后一个字符串SOAP_ACTION=”http://tempuri.org/getUser"; 最终字符串方法\u NAME=“getUser”; SoapObject请求=新的SoapObject(名称空间、方法名称); PropertyInfo用户名=新的PropertyInfo(); PropertyInfo passw=新的PropertyInfo(); PropertyInfo trans=新的PropertyInfo(); username.setValue(用户id); username.setType(String.class); username.setName(“custname”); request.addProperty(用户名); passw.setValue(密码); passw.setType(String.class); 密码设置名称(“pwd”); 请求.添加属性(passw); 传输设置值(tran); trans.setType(String.class); trans.setName(“signtype”); 请求。添加属性(trans); SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(请求); 系统输出打印项次(请求); HttpTransportSE androidHttpTransport=新的HttpTransportSE(URL); 试一试{ 调用(SOAP_操作,信封); //SoapPrimitive响应=(SoapPrimitive)信封.getResponse(); 对象响应=(对象)信封.getResponse(); Log.i(“reply”,response.toString()); System.out.println(“响应”+响应); if(response.toString().equalsIgnoreCase(“成功用户存在”)) { 结果=真; 系统输出打印项次(结果); Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH\u SHORT.show(); } else if(response.toString().equalsIgnoreCase(“用户名不存在”)) { 结果=假; Toast.makeText(getApplicationContext(),“用户名不正确”,Toast.LENGTH\u SHORT.show(); } 其他的 { Toast.makeText(getApplicationContext(),“passSwarm不正确”,Toast.LENGTH\u SHORT.show(); } }捕获(SocketException例外) { Log.e(“错误:”,“soapPrimitiveData()上的错误”+ex.getMessage()); 例如printStackTrace(); } 捕获(例外e){ Log.e(“错误:”,“soapPrimitiveData()上的错误”+e.getMessage()); e、 printStackTrace(); } 返回结果; } 私有类LoginTask扩展异步任务{ private final ProgressDialog dialog=新建ProgressDialog( 主要活动(本); 受保护的void onPreExecute(){ this.dialog.setMessage(“登录…”); this.dialog.show(); } 受保护的空位背景(空位…未使用){ boolean auth=doLogin(用户id、密码、tran); System.out.println(auth); Looper.prepare(); return null;//不与ui交互! } 受保护的void onPostExecute(void结果){ if(this.dialog.isShowing()){ this.dialog.disclose(); } } } }
日志cat错误:soapPrimitiveData()Can';t在未调用Looper.prepare()的线程内创建处理程序 公共类MainActivity扩展活动{ 私有文本用户名; 私人编辑文本通行证; 私有最终字符串命名空间=”http://tempuri.org/"; 私有最终字符串URL=”http://122.252.200.98/fts/registration.asmx"; 字符串用户标识; 字符串密码; 字符串tran=“2”; @凌驾 创建时的公共void(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 按钮符号=(按钮)findViewById(R.id.button1); signin.setOnClickListener(新的OnClickListener(){ 公共void onClick(视图v){ 用户名=(EditText)findViewById(R.id.editText1); user_id=username.getText().toString(); pass=(EditText)findViewById(R.id.editText2); password=pass.getText().toString(); 新登录任务().execute(); } }); } 私有布尔doLogin(字符串用户_id1,字符串密码1,字符串事务类型){ 布尔结果=假; 最后一个字符串SOAP_ACTION=”http://tempuri.org/getUser"; 最终字符串方法\u NAME=“getUser”; SoapObject请求=新的SoapObject(名称空间、方法名称); PropertyInfo用户名=新的PropertyInfo(); PropertyInfo passw=新的PropertyInfo(); PropertyInfo trans=新的PropertyInfo(); username.setValue(用户id); username.setType(String.class); username.setName(“custname”); request.addProperty(用户名); passw.setValue(密码); passw.setType(String.class); 密码设置名称(“pwd”); 请求.添加属性(passw); 传输设置值(tran); trans.setType(String.class); trans.setName(“signtype”); 请求。添加属性(trans); SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(请求); 系统输出打印项次(请求); HttpTransportSE androidHttpTransport=新的HttpTransportSE(URL); 试一试{ 调用(SOAP_操作,信封); //SoapPrimitive响应=(SoapPrimitive)信封.getResponse(); 对象响应=(对象)信封.getResponse(); Log.i(“reply”,response.toString()); System.out.println(“响应”+响应); if(response.toString().equalsIgnoreCase(“成功用户存在”)) { 结果=真; 系统输出打印项次(结果); Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH\u SHORT.show(); } else if(response.toString().equalsIgnoreCase(“用户名不存在”)) { 结果=假; Toast.makeText(getApplicationContext(),“用户名不正确”,Toast.LENGTH\u SHORT.show(); } 其他的 { Toast.makeText(getApplicationContext(),“passSwarm不正确”,Toast.LENGTH\u SHORT.show(); } }捕获(SocketException例外) { Log.e(“错误:”,“soapPrimitiveData()上的错误”+ex.getMessage()); 例如printStackTrace(); } 捕获(例外e){ Log.e(“错误:”,“soapPrimitiveData()上的错误”+e.getMessage()); e、 printStackTrace(); } 返回结果; } 私有类LoginTask扩展异步任务{ private final ProgressDialog dialog=新建ProgressDialog( 主要活动(本); 受保护的void onPreExecute(){ this.dialog.setMessage(“登录…”); this.dialog.show(); } 受保护的空位背景(空位…未使用){ boolean auth=doLogin(用户id、密码、tran); System.out.println(auth); Looper.prepare(); return null;//不与ui交互! } 受保护的void onPostExecute(void结果){ if(this.dialog.isShowing()){ this.dialog.disclose(); } } } },android,android-asynctask,handler,runtimeexception,looper,Android,Android Asynctask,Handler,Runtimeexception,Looper,日志cat错误: public class MainActivity extends Activity { private EditText username; private EditText pass; private final String NAMESPACE = "http://tempuri.org/"; private final String URL = "http://122.252.200.98/fts/registration.asmx"; String user_id
public class MainActivity extends Activity {
private EditText username;
private EditText pass;
private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://122.252.200.98/fts/registration.asmx";
String user_id;
String password;
String tran="2";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button signin = (Button) findViewById(R.id.button1);
signin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
username = (EditText) findViewById(R.id.editText1);
user_id = username.getText().toString();
pass = (EditText) findViewById(R.id.editText2);
password = pass.getText().toString();
new LoginTask().execute();
}
});
}
private boolean doLogin(String user_id1, String password1, String transactiontype) {
boolean result=false;
final String SOAP_ACTION = "http://tempuri.org/getUser";
final String METHOD_NAME = "getUser";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo username = new PropertyInfo();
PropertyInfo passw=new PropertyInfo();
PropertyInfo trans=new PropertyInfo();
username.setValue(user_id);
username.setType(String.class);
username.setName("custname");
request.addProperty(username);
passw.setValue(password);
passw.setType(String.class);
passw.setName("pwd");
request.addProperty(passw);
trans.setValue(tran);
trans.setType(String.class);
trans.setName("signtype");
request.addProperty(trans);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
System.out.println(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
//SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
Object response= (Object)envelope.getResponse();
Log.i("reply", response.toString());
System.out.println("response" +response);
if(response.toString().equalsIgnoreCase("Success-User Exists"))
{
result = true;
System.out.println(result);
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
else if(response.toString().equalsIgnoreCase("Username does not Exists"))
{
result=false;
Toast.makeText(getApplicationContext(), "username incorrect", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "passsword incorrect", Toast.LENGTH_SHORT).show();
}
}catch(SocketException ex)
{
Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
ex.printStackTrace();
}
catch (Exception e) {
Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage());
e.printStackTrace();
}
return result;
}
private class LoginTask extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(
MainActivity.this);
protected void onPreExecute() {
this.dialog.setMessage("Logging in...");
this.dialog.show();
}
protected Void doInBackground(Void... unused) {
boolean auth=doLogin(user_id,password,tran);
System.out.println(auth);
Looper.prepare();
return null;// don't interact with the ui!
}
protected void onPostExecute(Void result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
}
11-12 17:10:41.943:E/错误:(19833):soapPrimitiveData()上的错误无法在尚未调用Looper.prepare()的线程内创建处理程序
11-12 17:10:41.944:W/System.err(19833):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
11-1217:10:41.952:W/System.err(19833):在android.os.Handler.(Handler.java:152)
11-1217:10:41.954:W/System.err(19833):在android.widget.Toast上。(Toast.java:99)
11-12 17:10:41.957:W/System.err(19833):在android.widget.Toast.makeText(Toast.java:262)上
11-12 17:10:41.962:W/System.err(19833):位于com.example.logincheck.MainActivity.doLogin(MainActivity.java:113)
11-12 17:10:41.965:W/System.err(19833):位于com.example.logincheck.MainActivity.access$0(MainActivity.java:57)
11-12 17:10:41.967:W/System.err(19833):位于com.example.logincheck.MainActivity$LoginTask.doInBackground(MainActivity.java:145)
11-12 17:10:41.970:W/System.err(19833):位于com.example.logincheck.MainActivity$LoginTask.doInBackground(MainActivity.java:1)
11-12 17:10:41.973:W/System.err(19833):在android.os.AsyncTask$2.call(AsyncTask.java:216)
11-12 17:10:41.975:W/System.err(19833):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:337)
11-12 17:10:41.978:W/System.err(19833):在java.util.concurrent.FutureTask.run(FutureTask.java:169)处
11-12 17:10:41.981:W/System.err(19833):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1119)
11-12 17:10:41.983:W/System.err(19833):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:612)
11-12 17:10:41.986:W/System.err(19833):在java.lang.Thread.run(Thread.java:1052)处
这个问题已经被问了好几次了。但是这对我的问题没有帮助。
调试时我得到了上面的错误。我不知道我的代码中有什么错误。我浏览了这个链接。但我仍然不明白问题出在哪里。我认为在异步任务的
doInBackground
方法中显示吐司是个问题。您需要移动相关的UI
11-12 17:10:41.943: E/Error :(19833): Error on soapPrimitiveData() Can't create handler inside thread that has not called Looper.prepare()
11-12 17:10:41.944: W/System.err(19833): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-12 17:10:41.952: W/System.err(19833): at android.os.Handler.<init>(Handler.java:152)
11-12 17:10:41.954: W/System.err(19833): at android.widget.Toast.<init>(Toast.java:99)
11-12 17:10:41.957: W/System.err(19833): at android.widget.Toast.makeText(Toast.java:262)
11-12 17:10:41.962: W/System.err(19833): at com.example.logincheck.MainActivity.doLogin(MainActivity.java:113)
11-12 17:10:41.965: W/System.err(19833): at com.example.logincheck.MainActivity.access$0(MainActivity.java:57)
11-12 17:10:41.967: W/System.err(19833): at com.example.logincheck.MainActivity$LoginTask.doInBackground(MainActivity.java:145)
11-12 17:10:41.970: W/System.err(19833): at com.example.logincheck.MainActivity$LoginTask.doInBackground(MainActivity.java:1)
11-12 17:10:41.973: W/System.err(19833): at android.os.AsyncTask$2.call(AsyncTask.java:216)
11-12 17:10:41.975: W/System.err(19833): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:337)
11-12 17:10:41.978: W/System.err(19833): at java.util.concurrent.FutureTask.run(FutureTask.java:169)
11-12 17:10:41.981: W/System.err(19833): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1119)
11-12 17:10:41.983: W/System.err(19833): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:612)
11-12 17:10:41.986: W/System.err(19833): at java.lang.Thread.run(Thread.java:1052)
android.widget.Toast.<init>(Toast.java:99)
at android.widget.Toast.makeText(Toast.java:262)
protected Void doInBackground(Void... unused) {
boolean auth=doLogin(user_id,password,tran);
System.out.println(auth);
Looper.prepare();
return null;// don't interact with the ui!
}
public void showToast(String text) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainAcivity.this, text, Toast.LENGTH_LONG).show();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}