SkImageDecoder:工厂返回 null

Posted

技术标签:

【中文标题】SkImageDecoder:工厂返回 null【英文标题】:SkImageDecoder: Factory returned null 【发布时间】:2017-05-10 14:41:33 【问题描述】:

我正在使用 mysql 服务器将图像从数据库获取到 android 以显示在 ImageView 中。但是,我收到以下错误:

SkImageDecoder:: Factory returned null 

这个问题之前已经回答过了,但是我打过一次.decodeStream?如果您能帮助我将不胜感激

MainActivty.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener 
private String imagesJSON;

private static final String JSON_ARRAY ="result";
private static final String IMAGE_URL = "url";

private JSONArray arrayImages= null;

private int TRACK = 0;

private static final String IMAGES_URL = "http://thakurnigamananda.com/getAllImages.php";

private Button buttonFetchImages;
private Button buttonMoveNext;
private Button buttonMovePrevious;
private ImageView imageView;


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

    imageView = (ImageView) findViewById(R.id.imageView);
    buttonFetchImages = (Button) findViewById(R.id.buttonFetchImages);
    buttonMoveNext = (Button) findViewById(R.id.buttonNext);
    buttonMovePrevious = (Button) findViewById(R.id.buttonPrev);
    buttonFetchImages.setOnClickListener(this);
    buttonMoveNext.setOnClickListener(this);
    buttonMovePrevious.setOnClickListener(this);



private void extractJSON()
    try 
        JSONObject jsonObject = new JSONObject(imagesJSON);
        arrayImages = jsonObject.getJSONArray(JSON_ARRAY);
     catch (JSONException e) 
        e.printStackTrace();
    


private void showImage()
    try 
        JSONObject jsonObject = arrayImages.getJSONObject(TRACK);
        getImage(jsonObject.getString(IMAGE_URL));
     catch (JSONException e) 
        e.printStackTrace();
    


private void moveNext()
    if(TRACK < arrayImages.length())
        TRACK++;
        showImage();
    


private void movePrevious()
    if(TRACK>0)
        TRACK--;
        showImage();
    




private void getAllImages() 
    class GetAllImages extends AsyncTask<String,Void,String>
        ProgressDialog loading;
        @Override
        protected void onPreExecute() 
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this, "Fetching Data...","Please Wait...",true,true);
        

        @Override
        protected void onPostExecute(String s) 
            super.onPostExecute(s);
            loading.dismiss();
            imagesJSON = s;
            extractJSON();
            showImage();
        

        @Override
        protected String doInBackground(String... params) 
            String uri = params[0];
            BufferedReader bufferedReader = null;
            try 
                URL url = new URL(uri);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();

                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String json;
                while((json = bufferedReader.readLine())!= null)
                    sb.append(json+"\n");
                

                return sb.toString().trim();

            catch(Exception e)
                return null;
            
        
    
    GetAllImages gai = new GetAllImages();
    gai.execute(IMAGES_URL);


private void getImage(String urlToImage)
    class GetImage extends AsyncTask<String,Void,Bitmap>
        ProgressDialog loading;
        @Override
        protected Bitmap doInBackground(String... params) 
            URL url = null;
            Bitmap image = null;

            String urlToImage = params[0];
            try 
                url = new URL(urlToImage);
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());

             catch (MalformedURLException e) 
                e.printStackTrace();
             catch (IOException e) 
                e.printStackTrace();
            
            return image;
        

        @Override
        protected void onPreExecute() 
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this,"Downloading Image...","Please wait...",true,true);
        

        @Override
        protected void onPostExecute(Bitmap bitmap) 
            super.onPostExecute(bitmap);
            loading.dismiss();
            imageView.setImageBitmap(bitmap);
        
    
    GetImage gi = new GetImage();
    gi.execute(urlToImage);


@Override
public void onClick(View v) 
    if(v == buttonFetchImages) 
        getAllImages();
    
    if(v == buttonMoveNext)
        moveNext();
    
    if(v== buttonMovePrevious)
        movePrevious();
    


Logcat:

12-25 22:01:30.150 30009-30009/com.example.ayush.testingfordata     I/ViewRootImpl: ViewRoot's Touch Event : Touch Down
12-25 22:01:30.180 30009-30009/com.example.ayush.testingfordata I/ViewRootImpl: ViewRoot's Touch Event : Touch UP
12-25 22:01:30.340 30009-30225/com.example.ayush.testingfordata D/libc: getaddrinfo called from pid =30009
12-25 22:01:30.340 30009-30225/com.example.ayush.testingfordata E/DataScheduler: isDataSchedulerEnabled():false
12-25 22:01:30.340 30009-30225/com.example.ayush.testingfordata D/libc: getaddrinfo called from pid =30009
12-25 22:01:31.080 30009-30225/com.example.ayush.testingfordata D/libc: dnsproxy getaddrinfo returns 0
12-25 22:01:31.800 30009-30282/com.example.ayush.testingfordata D/skia: --- SkImageDecoder::Factory returned null

【问题讨论】:

没关系,我修复了,这是 PHP 脚本中的错误。 【参考方案1】:

已修复,PHP 脚本和数据库中的错误。

【讨论】:

以上是关于SkImageDecoder:工厂返回 null的主要内容,如果未能解决你的问题,请参考以下文章

有时位图解码返回 SkImageDecoder::Factory 返回 null 并显示损坏的图像

若执行fopen函数时发生错误,则函数的返回值是()。

AngularJS 工厂 http 返回空

我们可以有一个工厂类作为spring bean,并有一个工厂方法根据条件返回多个spring bean吗?

具有具体类作为返回类型的单元测试工厂方法

静态工厂的第四个优点是返回对象的类可以根据输入参数的不同而不同。