2017-06-21 152 views
0

下面的代码返回nullgetMimeTypeFromExtension返回null

MimeTypeMap.getSingleton().getMimeTypeFromExtension("json"); 

我和其他格式,如MP4,PNG等尝试它,而且它工作正常,但未能为json工作。

我也试过URLConnection.guessContentTypeFromName并且也是空的。

那么我怎样才能得到一个json的MIME类型,我期待它是"application/json"

治标不治本

public static final String MIME_TYPE_JSON = "application/json"; 

private static final String EXTENSION_JSON = "json"; 

@Nullable 
public static String getMimeType(final String path) { 
    // StringUtil is my own util but you can use Guava for the same result 
    String extension = StringUtil.getExtension(path).toLowerCase(); 
    return extension.equals(EXTENSION_JSON) ? 
       MIME_TYPE_JSON : MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
} 

回答

0

修改答案。

所以我测试了几件事,显然没有其他工作,然后urlConnection.getContenttype。我添加了一个我创建的示例。 Cart.java

package com.plumtestongo.sample; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.webkit.MimeTypeMap; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

public class Cart extends AppCompatActivity { 

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

     new background().execute(); 
    } 

    private class background extends AsyncTask<Void,Void,String>{ 

     @Override 
     protected String doInBackground(Void... params) { 
      String mime1; 
      String mime2; 
      String mime3; 
      String mime4; 
      boolean hasMime; 

      Uri uri = Uri.parse("http://192.168.0.6:3000/jo.json").buildUpon().build(); 
      try { 
       URL url = new URL(uri.toString()); 
       URLConnection urlConnection = url.openConnection(); 
       urlConnection.connect(); 
       mime1 = URLConnection.guessContentTypeFromName("jo.json"); 
       mime2 = urlConnection.getContentType(); 
       mime3 = URLConnection.guessContentTypeFromStream(urlConnection.getInputStream()); 
       mime4 = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url.toString())); 
       hasMime = MimeTypeMap.getSingleton().hasMimeType("application/json"); 
       Log.i(Cart.this.getClass().getName(),"Have extension we are looking for:"+hasMime); 
       Log.i(Cart.this.getClass().getName(),"From Name: Correct mime type is:"+mime1); 
       Log.i(Cart.this.getClass().getName(),"From Content type: Correct mime type is:"+mime2); 
       Log.i(Cart.this.getClass().getName(),"From Input stream type: Correct mime type is:"+mime3); 
       Log.i(Cart.this.getClass().getName(),"From Extension type: Correct mime type is:"+mime4); 

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


    } 

} 

我我的本地机器上托管的node.js Web服务器(express.js)。 app.js

var express = require('express'); 
var app = express(); 
const port = 3000; 
app.get('/', function (req, res) { 
    res.send('hello world') 
}); 
var stat = express.static('./public'); 
app.use(stat); 
app.listen(port, function() { 
    console.log('magic happening at:' + port); 
}); 

在主目录我有一个包含一个JSON文件(jo.json),并请在服务器发送该文件中的公用文件夹。 jo.json

{ 
    name: "inder" 
    , age: 24 
} 

和日志猫:

06-21 11:25:38.581 6441-6493/com.plumtestongo.sample I/com.plumtestongo.sample.Cart: Have extension we are looking for:false 
06-21 11:25:38.581 6441-6493/com.plumtestongo.sample I/com.plumtestongo.sample.Cart: From Name: Correct mime type is:null 
06-21 11:25:38.581 6441-6493/com.plumtestongo.sample I/com.plumtestongo.sample.Cart: From Content type: Correct mime type is:application/json 
06-21 11:25:38.581 6441-6493/com.plumtestongo.sample I/com.plumtestongo.sample.Cart: From Input stream type: Correct mime type is:null 
06-21 11:25:38.581 6441-6493/com.plumtestongo.sample I/com.plumtestongo.sample.Cart: From Extension type: Correct mime type is:null 

使用urlConnection.getContenttype这是唯一的方法工作。谢谢

+0

如果在问题中提到的方法中发生确切的字符串比较,那么这更准确吗? – droidev

+0

https://developer.android.com/reference/java/net/URLConnection.html#guessContentTypeFromStream(java.io.InputStream) 由于文档统计一些http服务器可以返回错误类型。它可以是更好的方法来得到我的从字节键入。 –

+0

这很有道理 – droidev

1

Android不支持“json”(和“js”为javascript扩展名),请检查源代码here。和see您调用的方法,如果给定的扩展未在定义的内容类型映射中列出,它将返回null。