2016-08-23 151 views
0

我有一个简单的问题,我确信有人理解一点点Java的基础知识可以帮助我。重复类:MainActivity

我正在使用React-Native,并获得了iOS的一切工作,但是当试图为android编译时,我得到一个名为“duplicate class:com.myApp.MainActivity”的错误。

我知道它可能MainActivity在下面的代码中定义了2次,但由于某种原因,我尝试了我所知道的一切,并且我无法将这两个MainActivity合并为一个。

有人能指出我正确的方向吗?谢谢!

package com.myApp; 

    import com.facebook.react.ReactActivity; 
    import com.oblador.vectoricons.VectorIconsPackage; 
    import com.tuanpm.RCTSmartconfig.RCTSmartconfigPackage; 
    import com.pusherman.networkinfo.RNNetworkInfoPackage; 
    import com.tuanpm.RCTMqtt.*; 

    public class MainActivity extends ReactActivity { 

     /** 
     * Returns the name of the main component registered from JavaScript. 
     * This is used to schedule rendering of the component. 
     */ 
     @Override 
     protected String getMainComponentName() { 
      return "myApp"; 
     } 
    } 

    public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mReactRootView = new ReactRootView(this); 

      mReactInstanceManager = ReactInstanceManager.builder() 
        .setApplication(getApplication()) 
        .setBundleAssetName("index.android.bundle") 
        .setJSMainModuleName("index.android") 
        .addPackage(new MainReactPackage(), 
       new VectorIconsPackage(), 
       new RCTSmartconfigPackage(), 
       new RCTMqttPackage()) 
        .addPackage(new RNNetworkInfoPackage())  // <- ADD HERE 
        .setUseDeveloperSupport(BuildConfig.DEBUG) 
        .setInitialLifecycleState(LifecycleState.RESUMED) 
        .build(); 

      mReactRootView.startReactApplication(mReactInstanceManager, "myApp", null); 

      setContentView(mReactRootView); 
     } 
    } 

更新1

以下@cybersam解决方案后,我得到这个:

:app:compileDebugJavaWithJavac 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:9: error: cannot find symbol 
public class MainActivity extends ReactActivity implements DefaultHardwareBackBtnHandler { 
                 ^
    symbol: class DefaultHardwareBackBtnHandler 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:12: error: cannot find symbol 
    protected void onCreate(Bundle savedInstanceState) { 
          ^
    symbol: class Bundle 
    location: class MainActivity 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:14: error: mReactRootView has private access in ReactActivity 
     mReactRootView = new ReactRootView(this); 
     ^
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:14: error: cannot find symbol 
     mReactRootView = new ReactRootView(this); 
          ^
    symbol: class ReactRootView 
    location: class MainActivity 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:16: error: mReactInstanceManager has private access in ReactActivity 
     mReactInstanceManager = ReactInstanceManager.builder() 
     ^
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:26: error: cannot find symbol 
       .setInitialLifecycleState(LifecycleState.RESUMED) 
             ^
    symbol: variable LifecycleState 
    location: class MainActivity 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:20: error: cannot find symbol 
       .addPackage(new MainReactPackage(), 
           ^
    symbol: class MainReactPackage 
    location: class MainActivity 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:16: error: cannot find symbol 
     mReactInstanceManager = ReactInstanceManager.builder() 
           ^
    symbol: variable ReactInstanceManager 
    location: class MainActivity 
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:29: error: mReactInstanceManager has private access in ReactActivity 
     mReactRootView.startReactApplication(mReactInstanceManager, "myApp", null); 
              ^
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:29: error: mReactRootView has private access in ReactActivity 
     mReactRootView.startReactApplication(mReactInstanceManager, "myApp", null); 
     ^
/Users/nicolasferro/Desktop/myApp/android/app/src/main/java/com/myApp/MainActivity.java:31: error: mReactRootView has private access in ReactActivity 
     setContentView(mReactRootView); 
        ^
11 errors 
:app:compileDebugJavaWithJavac FAILED 

回答

0

你有两个类具有完全相同的类名MainActivity。如果您继承了您声明的两个类中的两个行为,则可以将第一个类重命名为类似BaseActivity的类,然后获取您声明的第二个MainActivity类以扩展BaseActivity

1

由于ReactActivity已经扩展Activity,可以合并2个公共课(不允许)使用相同的全名(也不允许)为一个:

package com.myApp; 

import com.facebook.react.ReactActivity; 
import com.oblador.vectoricons.VectorIconsPackage; 
import com.tuanpm.RCTSmartconfig.RCTSmartconfigPackage; 
import com.pusherman.networkinfo.RNNetworkInfoPackage; 
import com.tuanpm.RCTMqtt.*; 

public class MainActivity extends ReactActivity implements DefaultHardwareBackBtnHandler { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mReactRootView = new ReactRootView(this); 

     mReactInstanceManager = ReactInstanceManager.builder() 
       .setApplication(getApplication()) 
       .setBundleAssetName("index.android.bundle") 
       .setJSMainModuleName("index.android") 
       .addPackage(new MainReactPackage(), 
      new VectorIconsPackage(), 
      new RCTSmartconfigPackage(), 
      new RCTMqttPackage()) 
       .addPackage(new RNNetworkInfoPackage())  // <- ADD HERE 
       .setUseDeveloperSupport(BuildConfig.DEBUG) 
       .setInitialLifecycleState(LifecycleState.RESUMED) 
       .build(); 

     mReactRootView.startReactApplication(mReactInstanceManager, "myApp", null); 

     setContentView(mReactRootView); 
    } 

    /** 
    * Returns the name of the main component registered from JavaScript. 
    * This is used to schedule rendering of the component. 
    */ 
    @Override 
    protected String getMainComponentName() { 
     return "myApp"; 
    } 
} 
+0

这使得很多感觉,实际上我正在尝试做什么,但我得到了很多新的错误,我失去了,如果它仍然是我缺少的东西,或只是一切需要调整。将使用新日志更新帖子 –

+0

要修复“无法找到符号”错误,您需要导入那些缺少的符号。 “有私人访问”错误意味着你正试图访问具有“私人”访问权限的变量(在超类中)。如果您需要后一个问题的帮助,您应该创建一个新的问题(修复符号错误之后),并清楚说明您正在尝试执行的操作。 – cybersam

0

您不仅有2类具有相同名称,但是,您在同一文件中有两个公用类,它们不能用java编译。