Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 空指针异常、actionbar活动和片段_Android_Android Fragments_Android Listview - Fatal编程技术网

Android 空指针异常、actionbar活动和片段

Android 空指针异常、actionbar活动和片段,android,android-fragments,android-listview,Android,Android Fragments,Android Listview,这是我的第三个应用程序,我想我太雄心勃勃了,不能这么做。一个应用程序,向我显示一个带有一些名称的列表视图,当单击“更改图像视图”时,此图像将从URL检索。此外,我还想在幻灯片上显示更多我刚才描述的“模板”。这里是我遇到最多问题的地方 已解决{ 我的日志说: 05-13 23:20:38.516: E/AndroidRuntime(687): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.e

这是我的第三个应用程序,我想我太雄心勃勃了,不能这么做。一个应用程序,向我显示一个带有一些名称的
列表视图
,当单击“更改
图像视图
”时,此图像将从URL检索。此外,我还想在幻灯片上显示更多我刚才描述的“模板”。这里是我遇到最多问题的地方

已解决{

我的日志说:

05-13 23:20:38.516: E/AndroidRuntime(687): java.lang.RuntimeException:
Unable to instantiate activity ComponentInfo{com.example.test2/
com.example.test2.ScreenSlideActivity}: java.lang.NullPointerException
}

新问题

单击
listview
它将停止显示:

05-13 23:51:46.751: E/AndroidRuntime(782): java.lang.RuntimeException: An error occured while executing doInBackground()
05-13 23:51:46.751: E/AndroidRuntime(782):  at android.os.AsyncTask$3.done(AsyncTask.java:299)
主要活动

public class ScreenSlideActivity extends ActionBarActivity {


SectionsPagerAdapter mSectionsPagerAdapter;

ViewPager mViewPager;

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

    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return PlaceholderFragment.newInstance(position);
    }

    @Override
    public int getCount() {
        return 6;
    }

}
public static class PlaceholderFragment extends Fragment {
    private static final String ARG_SECTION_NUMBER = "section_number";

    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args); 
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_screen_slide,
                container, false);

        String[] ponies = getResources().getStringArray(R.array.ponies);
        String[] poniesurl=getResources().getStringArray(R.array.poniesimg);
        final ArrayList<String> listurl = new ArrayList<String>();
        ListView listview = (ListView) rootView.findViewById(R.id.lista);
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < ponies.length; ++i) {
              list.add(ponies[i]);
              listurl.add(poniesurl[i]);
            }
        ArrayAdapter<String> arrayAdapter = 
                new ArrayAdapter<>(getActivity().getApplicationContext()
                        ,android.R.layout.simple_list_item_1,list);
        listview.setAdapter(arrayAdapter);
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                String selectedPonyURL=listurl.get(position);
                new ScreenSlideActivity().new DownloadImagesTask().execute(selectedPonyURL);
            }

        });

        return rootView;
    }
}
class DownloadImagesTask extends AsyncTask<String, Void, Bitmap> {


    protected Bitmap doInBackground(String... data) {
        String thumb = data[0];
        Bitmap bitmap = null;
        try {
            Log.d("TEST", "do in background");
            bitmap = BitmapFactory
                    .decodeStream((InputStream) new URL(thumb).getContent());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap img) {
        Log.d("TEST", "post execute");
        ImageView mChart = (ImageView) findViewById(R.id.imageView1);
        mChart.setImageBitmap(img);
    }}

}
公共类ScreenSlideActivity扩展了ActionBarActivity{
分段SPAGERADAPTER mSectionsPagerAdapter;
ViewPager mViewPager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u screen\u slide);
mSectionsPagerAdapter=新节spageradapter(
getSupportFragmentManager());
mViewPager=(ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
公共类节SpagerAdapter扩展了FragmentPagerAdapter{
公共部分SpagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回Placeholder Fragment.newInstance(位置);
}
@凌驾
public int getCount(){
返回6;
}
}
公共静态类占位符片段扩展了片段{
私有静态最终字符串ARG\u SECTION\u NUMBER=“SECTION\u NUMBER”;
公共静态占位符片段newInstance(int sectionNumber){
占位符片段=新占位符片段();
Bundle args=新Bundle();
参数Putin(参数段号,段号);
fragment.setArguments(args);
返回片段;
}
公共占位符片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u屏幕\u幻灯片,
货柜(虚假);;
String[]ponies=getResources().getStringArray(R.array.ponies);
String[]poniesurl=getResources().getStringArray(R.array.poniesimg);
final ArrayList listurl=新ArrayList();
ListView ListView=(ListView)rootView.findViewById(R.id.lista);
ArrayList=新建ArrayList();
对于(int i=0;i
我的布局

activiy\u screen\u slide.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.test2.ScreenSlideActivity" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >

<ImageView
    android:id="@+id/imageView1"
    android:paddingTop="10dp"
    android:layout_width="wrap_content"
    android:layout_height="200dip"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:src="@drawable/ic_launcher" />



<ListView
    android:id="@+id/lista"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/button1"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/imageView1" >

</ListView>

</RelativeLayout>

fragment\u screen\u slide.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.test2.ScreenSlideActivity" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >

<ImageView
    android:id="@+id/imageView1"
    android:paddingTop="10dp"
    android:layout_width="wrap_content"
    android:layout_height="200dip"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:src="@drawable/ic_launcher" />



<ListView
    android:id="@+id/lista"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/button1"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/imageView1" >

</ListView>

</RelativeLayout>

还有我的名单

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="ponies">
        <item>Rainbow Dash</item>
        <item>Apple Jack</item>
        <item>Rarity</item>
        <item>Pinkie Pie</item>
        <item>Twilight Sparkle</item>
        <item>Fluttershy</item>
    </string-array>
    <array name="poniesimg">
        <item>http://fc08.deviantart.net/fs71/f/2012/087/d/e/rainbow_dash_icon_request_by_megasuperheavy-d4u76ht.png</item>
        <item>https://www.fimfiction-static.net/images/avatars/28886_256.jpg?1336013578</item>
        <item>http://www.fimfiction-static.net/images/avatars/139363_256.jpg?1382473406</item>
        <item>https://lh6.googleusercontent.com/-fPQ-TEfk9RE/AAAAAAAAAAI/AAAAAAAAAD4/W_oT9Nz5MpY/photo.jpg</item>
        <item>https://pbs.twimg.com/profile_images/431214974363385856/GAmxwTe-.png</item>
        <item>http://files.gamebanana.com/img/ico/sprays/515cc647f37a4.png</item>
    </array>
</resources>

云宝黛西
苹果杰克
珍品
小指派
暮光闪闪
飘飘然
http://fc08.deviantart.net/fs71/f/2012/087/d/e/rainbow_dash_icon_request_by_megasuperheavy-d4u76ht.png
https://www.fimfiction-static.net/images/avatars/28886_256.jpg?1336013578
http://www.fimfiction-static.net/images/avatars/139363_256.jpg?1382473406
https://lh6.googleusercontent.com/-fPQ-TEfk9RE/AAAAAAAAAAI/AAAAAAAAAD4/W_oT9Nz5MpY/photo.jpg
https://pbs.twimg.com/profile_images/431214974363385856/GAmxwTe-.png
http://files.gamebanana.com/img/ico/sprays/515cc647f37a4.png
我知道这是一个弗兰肯斯坦,我非常感谢一些例子和建议。谢谢

问题出在:

new ScreenSlideActivity().new DownloadImagesTask()
正如您所看到的,您正在创建一个新的ScreenSlideActivity,而AsyncTask属于这个新任务,而不是当前正在执行的任务,这会扩大布局和“findById”的工作范围。由于您使用的是在新实例的实例上创建的AsyncTask,因此AsyncTask.onPostExecute()中的代码将严重失败:

  ImageView mChart = (ImageView) findViewById(R.id.imageView1);
为什么??因为findViewById()无法执行,因为活动实例是由您自己创建的,而不是由Android管理的。所以它丢失了

因此,不要使用这种方法…尝试将onItemClick执行委托给当前正在运行的活动实例中的方法..如下所示:

   listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            String selectedPonyURL=listurl.get(position);
            ((ScreenSlideActivity)getActivity()).handleOnItemClick(selectedPonyURL);
        }

    });

注意:永远不要实例化一个活动,它的创建是由Android管理的,如果你这样做,它就像一个普通的Java对象,但有问题

请添加日志猫输出的其余部分好吗?
ImageView mChart=(ImageView)findviewbyd(R.id.imageView1)在设置活动/片段的内容之前不要初始化
mChart
。感谢大家解决了mChart的问题:)我不知道在哪里写以及如何写