Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 NullPointerException imageView.setImageBitmap(位图)_Android_Image_Nullpointerexception_Download - Fatal编程技术网

Android NullPointerException imageView.setImageBitmap(位图)

Android NullPointerException imageView.setImageBitmap(位图),android,image,nullpointerexception,download,Android,Image,Nullpointerexception,Download,我正在尝试从网站下载一张图片。这是我的代码: 主要活动 ... public class MainActivity extends Activity { public final static String URL = "com.example.test3.URL"; ImageView imageView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved

我正在尝试从网站下载一张图片。这是我的代码: 主要活动

...
public class MainActivity extends Activity {
public final static String URL = "com.example.test3.URL";
ImageView imageView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

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

// execute by pressing button
public void send(View view){
    EditText enter = (EditText) findViewById(R.id.enter);
    String url = enter.getText().toString();
    ImageView imageView = (ImageView) findViewById(R.id.image1);
    new ImageDownload(imageView).execute(url);      
}

}
图像下载

public class ImageDownload extends AsyncTask<String, Void, Bitmap>{
ImageView imageView = null;
public ImageDownload(ImageView imageView){
    this.imageView = imageView;
}

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

    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new    PlaceholderFragment()).commit();
    }
    Intent intent = getIntent();
    String urlString = intent.getStringExtra(MainActivity.URL); */


@Override
protected Bitmap doInBackground(String... url) {
    if(url.length <= 0){        
        return null;
    }
    return downloadBitmap(url[0]);
}

public Bitmap downloadBitmap(String s) {
    String urlString = s;
    URL url;
    InputStream i;
    Bitmap bitmap = null;
    try { 
        url = new URL(urlString);       
        i = url.openStream();
        bitmap = BitmapFactory.decodeStream(i);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }

    return bitmap;
}

public void onPostExecute(Bitmap bitmap){
    Log.d("done", "onPostExecute");
    if(bitmap != null){
        this.imageView.setImageBitmap(bitmap);
    }
}   
}
fragment_image_download.xml:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.test3.ImageDownload$PlaceholderFragment" >

<ImageView
  android:contentDescription="@string/desc"
  android:id="@+id/image1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" >
</ImageView>

</RelativeLayout>


这个NullPointerException来自哪里?有人能帮我吗?

错误出现在
ImageDownload
的第90行:

at  com.example.test3.ImageDownload.onPostExecute(ImageDownload.java:90)
编辑:

image1
出现在片段的布局中
fragment\u main
不在活动的布局中
activity\u main
,这就是
NullPointerException
的原因


在片段布局中输入
EditText
,或者更改
image1
访问逻辑。

这里的问题是,您在片段内部使用的
视图不正确
send
函数是
Activity
类的成员,不是
Fragment
类,而是
ImageView
Fragment
中声明,因此在
findviewbyd
调用之前,应该提供它的根视图(它不等于
Activity
的根视图)。大概是这样的:

ImageView imageView = getFragmentManager().findFragmentById(...).getView().findViewById(R.id.image1);

但最好的解决方案是将所有与片段相关的逻辑移到
片段
类中。

调试…开发人员的最佳朋友ImageDownload类的第90行写了什么代码?@user3615363 no,我的意思是将处理
占位符片段
的逻辑移动到
占位符片段
中,我以前从未处理过占位符片段。你能给我介绍一下吗?@user3615363但是
PlaceholderFragment
只是你自己的类,你可以随意添加任何方法。网上有很多关于片段的教程。不管怎样,至少请尝试一下我在答案上发布的解决方案。
ImageView imageView = getFragmentManager().findFragmentById(...).getView().findViewById(R.id.image1);