【问题标题】:Please help me pass data from a service to an activity in Android Studio请帮助我将数据从服务传递到 Android Studio 中的活动
【发布时间】:2015-08-12 22:44:52
【问题描述】:

我正在尝试制作一个简单的介绍性应用程序,它允许用户通过文本字段向应用程序提供两个数字,通过服务添加这两个数字,然后将值传递回我的主要活动,它将在那里显示通过文本视图。问题是我在尝试将答案传递回我的主要活动时遇到错误。我知道服务不应该用于这种简单的操作,但正如我之前所说,这是介绍性的。

这是我的主要活动代码:

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)

【问题讨论】:

    标签: java android android-intent android-activity android-service


    【解决方案1】:

    当您创建服务时,它会在 Activity 旁边运行,而不是与它同步,就好像它是另一种方法一样。看起来您希望 Intent 会从服务返回到 onCreate,但它不会,因为它会在 Intent 不存在时尝试读取它。

    看看改用BroadcastReceiver。创建一个接收器以从服务中获取意图,然后在该接收器中使用结果更新 UI。

    【讨论】:

      【解决方案2】:

      正如您所说,您不应该为此使用服务,而只是使用您的代码 字符串 e = answerData.getString("e");

      您正在尝试获取“e”。

      t.putExtra("s",answer1);

      你传递的是“s”,应该是“e”。

      不知道能不能用。

      但另一种方法是使用活动来获得结果。

      问候。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多