首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空指针异常

空指针异常
EN

Stack Overflow用户
提问于 2015-05-03 02:38:39
回答 2查看 29关注 0票数 0

嗨,我是android编程的新手,在我开始使用NPE之前,一切都很顺利。我已经浏览了与此相关的问题和答案,但我没有看到任何精确的solutions.Most答案是重复我在教科书中已经有的东西。在这个论坛上有什么好老师帮我完成这段代码吗?我需要知道我做错了什么。

我的MainActivity.java是这样的: package com.westwall.helloworldlist;

代码语言:javascript
复制
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView; 


public class MainActivity extends ActionBarActivity {

private String[] countArray = {"India", "Europe", "Africa"};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, countArray);

ListView listView = (ListView)findViewById(R.id.label); 
listView.setAdapter(adapter); 

 }

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

--logcat

代码语言:javascript
复制
05-02 20:38:13.443: E/AndroidRuntime(377): FATAL EXCEPTION: main
05-02 20:38:13.443: E/AndroidRuntime(377): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.AbsListView.obtainView(AbsListView.java:1315)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ListView.makeAndAddView(ListView.java:1727)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ListView.fillDown(ListView.java:652)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ListView.fillFromTop(ListView.java:709)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ListView.layoutChildren(ListView.java:1580)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.AbsListView.onLayout(AbsListView.java:1147)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.View.layout(View.java:7035)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.os.Looper.loop(Looper.java:123)
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-02 20:38:13.443: E/AndroidRuntime(377):  at java.lang.reflect.Method.invokeNative(Native Method)
05-02 20:38:13.443: E/AndroidRuntime(377):  at java.lang.reflect.Method.invoke(Method.java:521)
05-02 20:38:13.443: E/AndroidRuntime(377):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-02 20:38:13.443: E/AndroidRuntime(377):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-02 20:38:13.443: E/AndroidRuntime(377):  at dalvik.system.NativeStart.main(Native Method)
05-02 20:38:13.443: E/AndroidRuntime(377): Caused by: java.lang.ClassCastException: android.widget.ListView
05-02 20:38:13.443: E/AndroidRuntime(377):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340)
05-02 20:38:13.443: E/AndroidRuntime(377):  ... 30 more
05-02 21:30:31.781: E/ArrayAdapter(406): You must supply a resource ID for a TextView
EN

回答 2

Stack Overflow用户

发布于 2015-05-03 02:46:23

您必须指定在R.layout.activity_listview中使用的TextView ID

更改此设置:

代码语言:javascript
复制
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.activity_listview, countArray); 

要这样做:

代码语言:javascript
复制
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.activity_listview, R.id.YOUR_TEXT_VIEW, countArray); 
票数 0
EN

Stack Overflow用户

发布于 2015-05-03 02:47:33

你的问题在这里,

代码语言:javascript
复制
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, countArray);

因为,ArrayAdapter需要第三个参数作为资源ID才能是TextView。因为您没有指定第三个参数,即这里的TextView id,所以您将收到错误。

如果您的TextView id在R.layout.activity_listview中是textView

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</TextView>
</LinearLayout>

那就应该是,

代码语言:javascript
复制
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    R.layout.activity_listview, R.id.textView, countArray);

检查第三个参数R.id.textView,您在代码中遗漏了哪个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30006056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档