Android Studio bug复制并粘贴一个类

时间:2014-12-24 01:11:31

标签: java android compilation

我有4个具有相同代码的类,只有一个区别,每个类都有一个不同的文件.txt路径,我复制并粘贴了类只更改了类名等等,而且文件路径过时,但它没有'工作。

工作的唯一路径与我复制代码以将其粘贴到其他类的类相同,如果我将第一个路径放在它工作的每个类中,如果我为每个类放置不同的路径代码工作将只是我手动编写代码的类中的路径,所以我认为它可能是Android Studio的复制和粘贴错误。如果我使用复制和粘贴会发生什么?我错了还是错误?

错误是:java.lang.NullPointerException如果我放置一个与我手动编写的类不同的路径(显然文件存在),就会发生这种情况。

我的代码:

public class MyMain extends ListActivity {
    private String[] menus = new String[12];

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        String name = menus[position];
        try {
            Class main = Class.forName("com.Package."+name);
            Intent intent = new Intent(MyMain.this,main);
            startActivity(intent);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void ReadPrices() throws IOException,MalformedURLException {
        // BufferedReader reader = new BufferedReader(new FileReader("/mnt/sdcard/Gaming_Prices.txt"));
        URL url = new URL("http://domain/myfile.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader((url).openStream()));
        String line = reader.readLine();
        int k = 0;
        for(k = 0; k<12; k++) {
            menus[k] = line;
            line=reader.readLine();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);
        try {
            ReadPrices();
            setListAdapter(new ArrayAdapter<String> (MyMain.this,android.R.layout.simple_expandable_list_item_1,menus));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

错误日志:

12-24 02:24:48.369  25855-25855/sparkyka.it.pcbuilds E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException
    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
    at android.widget.AbsListView.obtainView(AbsListView.java:1609)
    at android.widget.ListView.makeAndAddView(ListView.java:1772)
    at android.widget.ListView.fillDown(ListView.java:695)
    at android.widget.ListView.fillFromTop(ListView.java:752)
    at android.widget.ListView.layoutChildren(ListView.java:1623)
    at android.widget.AbsListView.onLayout(AbsListView.java:1439)
    at android.view.View.layout(View.java:7175)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    at android.view.View.layout(View.java:7175)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    at android.view.View.layout(View.java:7175)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1144)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1863)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
    at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

将此代码复制到另一个类时,您是否更改此行以引用新类,例如从MyMain.javaYourNewClass.java

setListAdapter(new ArrayAdapter<String>  
 (MyMain.this,android.R.layout.simple_expandable_list_item_1,menus));

答案 1 :(得分:0)

你的课程是Activities吗?如果是,您是否在Manifest声明了它们?

编辑:使用此代码检查一切是否正常:

Class main = Class.forName("com.Package." + name);

com.Package不应包含大写字母。使用

Log.d("LOG", name[position]);

查看收到的名字是否一切正常。

EDIT2:好像我看到了问题。您的txt文件是文件夹assets中的本地文件,对吗? 如果不是,请在项目的根目录中创建文件夹assets,然后将txt文件放在那里。 然后:

AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

我希望这会有所帮助。