Android Studio 错误复制和过去一个类



我有 4 个具有相同代码的类,只有区别,每个类都有不同的文件.txt路径,我复制并粘贴了该类只是更改了类名等内容,并忘记了文件路径,但它不起作用。

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

错误是: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)

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

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

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

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

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

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

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

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

编辑2:似乎我看到了问题。您的txt文件是文件夹 assets 中的本地文件,对吗?如果没有,请在项目的根目录中创建文件夹assets,并将txt文件放在那里。然后:

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

我希望这会有所帮助。

最新更新