Java 请帮助我将数据从服务传递到Android Studio中的活动
我正在尝试制作一个简单的介绍性应用程序,允许用户通过文本字段向应用程序提供两个数字,通过服务添加两个数字,然后将值传递回我的主要活动,并通过文本视图显示。问题是,我在尝试将答案传递回主要活动时出错。我知道服务不应该用于这个简单的操作,但正如我前面所说的,这是介绍性的 以下是我的主要活动代码:Java 请帮助我将数据从服务传递到Android Studio中的活动,java,android,android-intent,android-activity,android-service,Java,Android,Android Intent,Android Activity,Android Service,我正在尝试制作一个简单的介绍性应用程序,允许用户通过文本字段向应用程序提供两个数字,通过服务添加两个数字,然后将值传递回我的主要活动,并通过文本视图显示。问题是,我在尝试将答案传递回主要活动时出错。我知道服务不应该用于这个简单的操作,但正如我前面所说的,这是介绍性的 以下是我的主要活动代码: import android.content.ComponentName; import android.content.Context; import android.content.Intent; im
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
MyService myService;
boolean isBound = false;
private static TextView entry;
private static EditText entry1;
private static EditText entry2;
public void addAllTheNumbers(View view){
entry1 = (EditText) findViewById(R.id.entry1);
entry2 = (EditText) findViewById(R.id.entry2);
entry = (TextView) findViewById(R.id.answer);
final String s = entry1.getText().toString();
final String s1 = entry2.getText().toString();
Intent n = new Intent(this,MyService.class);
n.putExtra("firstNumber", s);
n.putExtra("secondNumber", s1);
startService(n);
Bundle answerData = getIntent().getExtras();
String e = answerData.getString("e");
entry.setText(e);
}
以下是服务代码:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class MyService extends Service {
private final IBinder ryansBinder = new MyLocaleBinder();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return ryansBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String comeOn = intent.getStringExtra("firstNumber");
String man = intent.getStringExtra("secondNumber");
int firstNum = 0;
int secondNum = 0;
try {
firstNum = Integer.parseInt(comeOn);
secondNum = Integer.parseInt(man);
} catch (NumberFormatException nfe) {
return Integer.parseInt(null);
}
int sum;
sum = firstNum + secondNum;
String answer1 = String.valueOf(sum);
Intent t = new Intent(this,MainActivity.class);
t.putExtra("s",answer1);
return START_STICKY;
}
public class MyLocaleBinder extends Binder{
MyService getService(){
return MyService.this;
}
}
}
最后,我的错误代码:
08-12 17:37:50.252 31546-31546/com.example.vanessaanthony.myfirstservice E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.vanessaanthony.myfirstservice, PID: 31546
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4020)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference at com.example.vanessaanthony.myfirstservice.MainActivity.addAllTheNumbers(MainActivity.java:38)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
当您创建服务时,它会在活动旁边运行,而不是像它是另一个方法一样与活动同步。看起来您期望意图会从服务返回到onCreate中,但它不会返回,因为它将在意图不存在时尝试读取意图
请看一下如何使用。创建一个接收者以从服务中获取意图,然后在该接收者中用结果更新UI。正如您所说,您不应该为此使用服务,而应该只是修改代码 字符串e=answerData.getString(“e”) 你在试着得到“e” t、 putExtra(“s”,回答1) 你通过了“s”,应该是“e” 我不知道这是否管用 但另一种方法是使用活动来获得结果 问候