方法getText()必须从UI线程(Android Studio)调用

我正在尝试为应用程序创建登录名。但是我有一个问题。

这是我的代码:

package com.forgetmenot.loginregister;

import java.util.ArrayList;

import java.util.List;

import org.apache.http.NameValuePair;

import org.apache.http.message.BasicNameValuePair;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.Activity;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

public class MainActivity extends Activity {

EditText uname, password;

Button submit;

// Creating JSON Parser object

JSONParser jParser = new JSONParser();

private static final String TAG = "Login";

JSONObject json;

private static String url_login = "http://localhost:8080/ForgetMeNotApplication/Login";

//JSONArray incoming_msg = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewsById();

submit.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

// execute method invokes doInBackground() where we open a Http URL connection using the given Servlet URL

//and get output response from InputStream and return it.

new Login().execute();

}

});

}

private void findViewsById() {

uname = (EditText) findViewById(R.id.txtUser);

password = (EditText) findViewById(R.id.txtPass);

submit = (Button) findViewById(R.id.login);

}

private class Login extends AsyncTask<String, String, String>{

@Override

protected String doInBackground(String... args) {

// Getting username and password from user input

String username = uname.getText().toString();

String pass = password.getText().toString();

List<NameValuePair> params = new ArrayList<NameValuePair>();

params.add(new BasicNameValuePair("u",username));

params.add(new BasicNameValuePair("p",pass));

json = jParser.makeHttpRequest(url_login, "GET", params);

String s=null;

try {

s= json.getString("info");

Log.d("Msg", json.getString("info"));

if(s.equals("success")){

Intent login = new Intent(getApplicationContext(), home.class);

login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(login);

finish();

}

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

Android

studio表示getText()必须在istructions的UI线程中调用该方法:uname.getText().toString();以及

password.getText().toString();可能的解决方案?

回答:

尝试将您的值传递给Login AsyncTask via execute(param1, param1, ..., paramN)方法:

submit.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

String username = uname.getText().toString();

String pass = password.getText().toString();

new Login().execute(username, pass);

}

});

}

private void findViewsById() {

uname = (EditText) findViewById(R.id.txtUser);

password = (EditText) findViewById(R.id.txtPass);

submit = (Button) findViewById(R.id.login);

}

private class Login extends AsyncTask<String, String, String>{

@Override

protected String doInBackground(String... args) {

// Getting username and password from user input

String username = args[0];

String pass = args[1];

以上是 方法getText()必须从UI线程(Android Studio)调用 的全部内容, 来源链接: utcz.com/qa/417663.html

回到顶部