Fehler: "die Methode getText() muss aufgerufen werden, aus der UI-thread, derzeit abgeleitete thread-worker."
Während der Arbeit am Projekt bekomme ich eine Fehlermeldung auf die folgende Aktivität.
1. Login.java
auf die folgende Zeile von code.
Zeile: "String username = user.getText().toString();"
Fehler: "die Methode getText() muss aufgerufen werden, aus der UI-thread, derzeit abgeleitete thread-worker."
Ist meine ganze Tätigkeit Code.
package com.example.mysqltest;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Login extends Activity implements OnClickListener {
private EditText user, pass;
private Button mSubmit, mRegister;
//Progress Dialog
private ProgressDialog pDialog;
//JSON parser class
JSONParser jsonParser = new JSONParser();
//php login script location:
//localhost :
//testing on your device
//put your local ip instead, on windows, run CMD > ipconfig
//or in mac's terminal type ifconfig and look for the ip under en0 or en1
//private static final String LOGIN_URL = "http://xxx.xxx.x.x:1234/webservice/login.php";
//testing from a real server:
//private static final String LOGIN_URL = "http://www.example.com/webservice/login.php";
//JSON element ids from repsonse of php script:
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
public static String username;
public static String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
//setup input fields
user = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);
//setup buttons
mSubmit = (Button) findViewById(R.id.login);
mRegister = (Button) findViewById(R.id.register);
//register listeners
mSubmit.setOnClickListener(this);
mRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
switch (v.getId()) {
case R.id.login:
username = user.getText().toString();
password = pass.getText().toString();
new AttemptLogin().execute();
break;
case R.id.register:
Intent i = new Intent(this, Register.class);
startActivity(i);
break;
default:
break;
}
}
class AttemptLogin extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
*/
boolean failure = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
//TODO Auto-generated method stub
//Check for success tag
int success;
try {
//Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("request!", "starting");
//getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(
LOGIN_URL, "POST", params);
//check your log for json response
Log.d("Login attempt", json.toString());
//json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
Intent i = new Intent(Login.this, ReadComments.class);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
} else {
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
**/
protected void onPostExecute(String file_url) {
//dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
- hast du überprüft, meine Antwort ?
- Ja habe ich geprüft, es funktioniert. Aber einige andere Fehler kommen. Ich habe stellen Sie eine andere Frage für Sie und veröffentlichen Sie Sie auf stackoverflow.com
- Sound ist gut, dann akzeptieren Sie meine Antwort und posten Ihre Probleme in eine neue Frage. ich werde versuchen, diese so gut 🙂
- Mein Ruf ist gering zu akzeptieren als Antwort.
- Wenn Sie haben weniger Ruf auch können Sie annehmen, Ihre eigene Antwort. finden Sie ein Häkchen unter die up-vote/down-vote-bar..einfach überprüfen Sie es !
- Sie helfen bei der Schaffung einer android login mit php/mysql webservice mit volley-Bibliothek?
- Sicher, dass ich vll.. Aber Sie können einen Versuch geben und wenn Sie fehlschlagen, dann stellen Sie eine Frage... siehe diese eine stackoverflow.com/questions/31046259/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sei denn, etwas geändert hat ich bin mir nicht bewusst, dass sollte nicht das problem sein. UI-Elemente können nicht aktualisiert werden, aus dem hintergrund, aber der Zugriff auf die Getter hat nie ein Problem.
Sowieso, Sie können dies umgehen, indem ein Konstruktor Ihre AsyncTask das die zwei Saiten, dann schicken Sie Ihnen bei der Erstellung Ihrer Aufgabe.
geben Sie in Ihrem onClick()