java - 在 Android 应用程序中将 Jersey 用于 restful api 时出现此错误 :

标签 java android rest

  1. 这是我正在使用的代码:

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Logger;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import org.apache.commons.codec.binary.Base64;
    
    
     public class Fragment_2 extends Fragment {
    static Logger logger = Logger.getLogger(Fragment_2.class.getSimpleName());
    
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    
     new Thread(new Runnable() {
    
        public void run() {
    
            try {
                 String base64 = null;
                    String imageDataString2 = null;
                    File file = new File("/mnt/sdcard/DCIM/Camera/2013-03-27 00.22.48.jpg");
    
                    try {
                           // Reading a Image file from file system
                           FileInputStream imageInFile = new FileInputStream(file);
                           byte imageData[] = new byte[(int) file.length()];
                           imageInFile.read(imageData);
    
                           // Converting Image byte array into Base64 String
                           String imageDataString = new String(Base64.encodeBase64(imageData));
    
                           imageDataString2 = imageDataString.replace("_", "/");
                           imageDataString2 = imageDataString2.replace("-", "+");
    
                           System.out.println(imageDataString2);
                           base64 = imageDataString2;
                           System.out.println("Image Successfully Manipulated!");
                       } catch (FileNotFoundException e) {
                           System.out.println("Image not found" + e);
                       } catch (IOException ioe) {
                           System.out.println("Exception while reading the Image " + ioe);
                       }                        
                        ClientConfig config = new DefaultClientConfig();
                        Client client = Client.create(config);
                        WebResource service = client.resource(UriBuilder.fromUri("http://xxxxxx:8080/api").build());//change it to the latest URL 
    
                        Form f = new Form();                   
                        f.add("img",base64 );    
    
                        String s = service.post(String.class, f);
    
            } catch (Exception e) {
    
            }           
        }
    
    }).start();                         
     return inflater.inflate(R.layout.fragment_2, container, false);
    }
    
     }
    

这里是错误:

03-28 03:50:24.569: W/dalvikvm(20989): Link of class 'Lcom/sun/jersey/core/osgi/OsgiRegistry;' failed
03-28 03:50:24.569: W/dalvikvm(20989): VFY: unable to resolve static method 5977: Lcom/sun/jersey/core/osgi/OsgiRegistry;.getInstance ()Lcom/sun/jersey/core/osgi/OsgiRegistry;
03-28 03:50:24.569: W/dalvikvm(20989): Link of class 'Lcom/sun/jersey/core/osgi/OsgiRegistry;' failed
03-28 03:50:24.569: W/dalvikvm(20989): VFY: unable to find class referenced in signature (Lcom/sun/jersey/core/osgi/OsgiRegistry;)
03-28 03:50:27.379: W/dalvikvm(20989): Exception Ljava/lang/NullPointerException; thrown while initializing Lcom/sun/jersey/core/header/MediaTypes;
03-28 03:50:27.379: W/dalvikvm(20989): threadid=9: thread exiting with uncaught exception (group=0x40018578)
03-28 03:50:27.399: E/AndroidRuntime(20989): FATAL EXCEPTION: Thread-10
03-28 03:50:27.399: E/AndroidRuntime(20989): java.lang.ExceptionInInitializerError
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.core.spi.factory.MessageBodyFactory.getMessageBodyWriterMediaTypes(MessageBodyFactory.java:444)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.api.client.RequestWriter.getMediaType(RequestWriter.java:324)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:282)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:213)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.api.client.Client.handle(Client.java:648)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.api.client.WebResource.post(WebResource.java:251)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.example.programming_fragments.Fragment_2$1.run(Fragment_2.java:91)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at java.lang.Thread.run(Thread.java:1019)
03-28 03:50:27.399: E/AndroidRuntime(20989): Caused by: java.lang.NullPointerException
03-28 03:50:27.399: E/AndroidRuntime(20989):    at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
03-28 03:50:27.399: E/AndroidRuntime(20989):    at com.sun.jersey.core.header.MediaTypes.<clinit>(MediaTypes.java:65)
03-28 03:50:27.399: E/AndroidRuntime(20989):    ... 10 more

我该怎么办?

最佳答案

我不确定这是不是正确的解决方案

根据 Jersey deps你需要在依赖项/类路径中有 jersey-json 模块。

如果库名为 libitv.so 并且在构建 .apk 之前位于应用程序目录的 libs\armeabi 目录中,则该库将被识别。

有时库没有完全复制(部分复制)时,由于某些系统问题,部分库也不会被识别。

有关详细信息,请参阅 here

试试这个 link有一些解决办法

更新:

java.lang.ExceptionInInitializerError

引起:java.lang.UnsatisfiedLinkError: Library jniavutil not found

除了 libsndfile 之外,您还需要安装 libFLAC。 您可以使用您使用的任何方法安装 libFLAC 安装 libsndfile...

您错过了 ddms 日志中的重要部分。寻找一个 包含“引起”和/或包含更多异常的行 记录下来,以便我们查看。

您已在启用 CodePro 覆盖的情况下进行编译。将其关闭。

实际上这是我们在 ADT 17 中面临的问题,您必须将 jar 文件放入 libs 文件夹才能克服此异常

所以右键单击您的项目 --> 创建一个名为 libs 的文件夹

然后按照这一步

 right click (on libs folder) -->import-->File System-->browse to select your jar file and hit finish and run you project.

之后

 right click on the project --> Built Path-->java built path-->add jars select your jar file from your libs folder

如果这也不起作用重建 一切(包括数据),它会工作。

关于java - 在 Android 应用程序中将 Jersey 用于 restful api 时出现此错误 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680035/

相关文章:

rest - altova mapforce 是否公开任何 REST API?

java - Jersey 1.17 速率限制

iphone - Foursquare无用户搜索iOS

php - 共享和存储 AES 加密/解密的 IV

java - 分辨率不同于 72dpi 的 JasperReports

java - 在 Java 中,为什么 ResultSet 不允许运行 next() 超过 1 次?

java - HTTP/1.1 302 临时移动 - 发生在 Android API 16-17 上

java - 如何从 URI 中删除片段

android - Android Studio 中的 lldb : select frame does not work

android - Facebook sdk 的最低 sdk