Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.RuntimeException:无法实例化服务{….}can';t实例化类;没有空构造函数_Android - Fatal编程技术网

Android java.lang.RuntimeException:无法实例化服务{….}can';t实例化类;没有空构造函数

Android java.lang.RuntimeException:无法实例化服务{….}can';t实例化类;没有空构造函数,android,Android,我尝试在Android应用程序中启动服务时出错 我在暂停活动之前启动服务rigth,以便将一些信息上载到服务器 java.lang.RuntimeException: Unable to instantiate service can't instantiate class ; no empty constructor 问题出现在我启动服务时: protected void onPause() { super.onPause(); EditText nicknam

我尝试在Android应用程序中启动服务时出错 我在暂停活动之前启动服务rigth,以便将一些信息上载到服务器

    java.lang.RuntimeException: Unable to instantiate service  can't instantiate class ; no empty constructor
问题出现在我启动服务时:

 protected void onPause() {
    super.onPause();

    EditText nicknameText = (EditText) findViewById(R.id.EditText_Nickname);
    EditText emailText = (EditText) findViewById(R.id.EditText_Email);

    String strNickname = nicknameText.getText().toString();
    String strEmail = emailText.getText().toString();

    SharedPreferences.Editor editor = mGameSettings.edit();
    editor.putString(GAME_PREFERENCES_NICKNAME, strNickname);
    editor.putString(GAME_PREFERENCES_EMAIL, strEmail);

    editor.commit();

    //Antes de salir lanzamos una actividad nueva para hacer el upload de la info

    Intent uploadService = new Intent(getApplicationContext(),UploaderService.class);
    startService(uploadService);


}
然后服务将启动一个异步任务

public  class UploaderService extends Service{

    public UploaderService(){
        super();
    }

    private UpLoadUserData upLoadUserData;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        upLoadUserData = new UpLoadUserData();
        upLoadUserData.execute();
        Log.d(DEBUG_TAG, "Settings and image upload requested");
        return START_REDELIVER_INTENT;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // no binding
        return null;
    }
}
舱单:

    <?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidbook.btdt.hour6"
    android:versionCode="1"
    android:versionName="1.0"
    android:installLocation="auto">
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="10"></uses-sdk>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:debuggable="true">
        <activity
            android:name=".QuizSplashActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="QuizHelpActivity"></activity>
        <activity
            android:name="QuizMenuActivity"></activity>
        <activity
            android:name="QuizScoresActivity"></activity>
        <activity
            android:name="QuizSettingsActivity"></activity>
        <activity
            android:name="QuizGameActivity"></activity>
        <service android:name="QuizSettingsActivity$UploaderService"></service>
    </application>
</manifest>

首先,您不能拥有普通嵌套类的
服务。它必须是一个
静态
嵌套类

其次,拥有一个
服务
,它是
活动
静态
嵌套类,这是非常奇怪的

第三,让一个
服务
生成一个
异步任务
,而不仅仅是使用
IntentService
,这是非常奇怪的

第四,将
getApplicationContext()
替换为
this
。只有当您知道为什么要使用
getApplicationContext()
并且不需要它时,才可以使用
getApplicationContext()

非常感谢

我可以通过从IntentService扩展到INSERVICE来成功地启动该服务

  public static  class UploaderService extends IntentService{

    String DEBUG_TAG = UploaderService.class.getSimpleName();

    SharedPreferences mGameSettings;
以及在Manifest.xml中定义意图服务

<service android:name=".QuizSettingsActivity$UploaderService"/>

TL:DR.你需要做的只是简单地做很多。