Android : 在线程中从服务器获取数据,并将其传递给 UI 线程失败
Android : Getting data from server in thread, and passing it to UI thread failing
我正在开发一个 Android 应用程序,我试图在登录后从服务器获取数据,但是我已经失败了好几个小时,无论我怎么做都失败了。 .请让我知道我在这里做错了什么。
错误日志:
07-10 15:24:09.136 4588-4588/com.example.TestLunch E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.TestLunch, PID: 4588
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:139)
at com.example.TestLunch.Login.Login.onClick(Login.java:104)
以上是因为我正在尝试打印来自服务器的回复。
public class Login extends Activity {
RestTemplate rest = StaticRestTemplate.getRest();
protected volatile String reply;
// below code is inside the onCreate method
Button loginButton = (Button) findViewById(R.id.LoginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!(v == null)) {
EditText userEmail = (EditText) findViewById(R.id.usernameText);
EditText userPassword = (EditText) findViewById(R.id.PasswordField);
if (!(userEmail.getText().toString().isEmpty())) {
if (!(userPassword.getText().toString().isEmpty())) {
loginUserViaRest(userEmail.getText().toString(), userPassword.getText().toString());
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
reply = rest.getForObject(
"http://192.168.178.60:8080/dashboard", String.class);
}
});
thread.start();
ProgressDialog progress = new ProgressDialog(Login.this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.show();
while (thread.getState()!=Thread.State.TERMINATED){
}
progress.dismiss();
// I get the error at below line.
Log.d("Reply is ",reply);
那么,到底出了什么问题。任何指针,谢谢。
很简单。您的回复字符串为空,您没有从服务器获得回复。
检查您对清单的许可并检查您是否添加了
<uses-permission android:name="android.permission.INTERNET" />
是否
使用 AsyncRestTemplate 而不是 RestTemplate,像那样使用 getForEntity method, and attach a ListenableFutureCallback;
rest.getForEntity(...).addCallback(...);
那是因为你用线程给变量赋值,调用的时候reply还没有取到值
Log.d("Reply is ",reply);
我正在开发一个 Android 应用程序,我试图在登录后从服务器获取数据,但是我已经失败了好几个小时,无论我怎么做都失败了。 .请让我知道我在这里做错了什么。
错误日志:
07-10 15:24:09.136 4588-4588/com.example.TestLunch E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.TestLunch, PID: 4588
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:139)
at com.example.TestLunch.Login.Login.onClick(Login.java:104)
以上是因为我正在尝试打印来自服务器的回复。
public class Login extends Activity {
RestTemplate rest = StaticRestTemplate.getRest();
protected volatile String reply;
// below code is inside the onCreate method
Button loginButton = (Button) findViewById(R.id.LoginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!(v == null)) {
EditText userEmail = (EditText) findViewById(R.id.usernameText);
EditText userPassword = (EditText) findViewById(R.id.PasswordField);
if (!(userEmail.getText().toString().isEmpty())) {
if (!(userPassword.getText().toString().isEmpty())) {
loginUserViaRest(userEmail.getText().toString(), userPassword.getText().toString());
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
reply = rest.getForObject(
"http://192.168.178.60:8080/dashboard", String.class);
}
});
thread.start();
ProgressDialog progress = new ProgressDialog(Login.this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.show();
while (thread.getState()!=Thread.State.TERMINATED){
}
progress.dismiss();
// I get the error at below line.
Log.d("Reply is ",reply);
那么,到底出了什么问题。任何指针,谢谢。
很简单。您的回复字符串为空,您没有从服务器获得回复。 检查您对清单的许可并检查您是否添加了
<uses-permission android:name="android.permission.INTERNET" />
是否
使用 AsyncRestTemplate 而不是 RestTemplate,像那样使用 getForEntity method, and attach a ListenableFutureCallback;
rest.getForEntity(...).addCallback(...);
那是因为你用线程给变量赋值,调用的时候reply还没有取到值
Log.d("Reply is ",reply);