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的问题:)我不知道在哪里写以及如何写