Intereting Posts
नोट लेने वाली ध्वनि कार्रवाई के साथ एक एंड्रॉइड वेअर ऐप कैसे बनाएं? एक आवेदन में 2 नक्शा के टुकड़े का उपयोग करते समय अंक एंड्रॉइड एनडीके – एक दूसरे को कॉल करने के लिए दो देशी साझा लाइब्रेरी बनाएं एंड्रॉइड प्रोजेक्ट के लिए ग्रेडल में प्रोग्यूर्ड मैपिंग फ़ाइल नाम कैसे बदल सकता है एंड्रॉइड सिस्टम वेबविव एंड्रॉइड ऐप को क्रैश करता है! "जेब एमआर 2 + यूजर बिल्ड पर टोम्बस्टोन अक्षम हैं" विंडोज में सैमसंग गैलेक्सी एस 3 का इस्तेमाल करते हुए हार्डवेयर डिबगिंग किसी मौजूदा एप्लिकेशन के लिए प्रमाणपत्र फ़िंगरप्रिंट बदलना मैं एंड्रॉइड मीडियाप्लेयर में वर्तमान मात्रा / आयाम कैसे प्राप्त करूं? अधिसूचना से आशय के पास अतिरिक्त नहीं है एंड्रॉइड व्यू ग्रुप: ओनलेआउट () ओवरराइड में मुझे क्या करना चाहिए? अक्षांश / देशांतर और मीटर एंड्रॉइड 2.3.4 पर एप्लिकेशन इंस्टॉल नहीं हुआ stringByEvaluatingJavascriptFromString (आईओएस मेथड, एंड्रॉइड समकक्ष क्या है?) रीसाइक्लरदृश्य में एक स्क्रॉल की स्थिति में कैसे बने रहने के लिए अपनी पहली इंडेक्स में आइटम जोड़ने के बाद और Notifydatasetchange को कॉल करें एंड्रॉइड पर पृष्ठभूमि में Google वॉयस लगातार कैसे चलाना है

एंड्रॉइड पर जर्सी क्लाइंट – NullPointerException

मैं एक वेब सेवा बनाने के लिए एक सरल एंड्रॉइड क्लाइंट बनाने की कोशिश कर रहा हूं, लेकिन रनटाइम पर कुछ गलत हो गया है

यहां ग्राहक है:

public class MyClient extends AsyncTask<EditText, Integer, String> { private EditText text; protected String doInBackground(EditText... strings) { RuntimeDelegate .setInstance(new com.sun.ws.rs.ext.RuntimeDelegateImpl()); WebResource wbr; Client client = Client.create(); wbr = client .resource("http://my.ip:8080/MazeService/rest/service/hello"); String result = wbr.queryParam("number", "10") .accept(MediaType.APPLICATION_JSON).get(String.class); text = strings[0]; return result; } protected void onProgressUpdate(Integer... progress) { // setProgressPercent(progress[0]); } protected void onPostExecute(String result) { if (result != null) this.text.setText(result); else Log.d("MyApp", "No Result"); } 

}

और सेवा:

 @Path("/service") public class AndroidService { @GET @Produces(MediaType.APPLICATION_JSON ) @Path("/hello") public String getJSON(@QueryParam("number") String nr) { String s = "Hi there! The number is: "+nr; return s; } } 

मुझे लॉगकाट में यह स्टैकट्र्रेस मिलता है:

 02-18 16:26:06.446: E/AndroidRuntime(1381): FATAL EXCEPTION: AsyncTask #1 02-18 16:26:06.446: E/AndroidRuntime(1381): java.lang.RuntimeException: An error occured while executing doInBackground() 02-18 16:26:06.446: E/AndroidRuntime(1381): at android.os.AsyncTask$3.done(AsyncTask.java:278) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 02-18 16:26:06.446: E/AndroidRuntime(1381): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.lang.Thread.run(Thread.java:856) 02-18 16:26:06.446: E/AndroidRuntime(1381): Caused by: java.lang.NullPointerException 02-18 16:26:06.446: E/AndroidRuntime(1381): at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getType(ClientResponse.java:615) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:532) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource.handle(WebResource.java:674) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.maze.client.MyClient.doInBackground(MyClient.java:25) 02-18 16:26:06.446: E/AndroidRuntime(1381): at com.maze.client.MyClient.doInBackground(MyClient.java:1) 02-18 16:26:06.446: E/AndroidRuntime(1381): at android.os.AsyncTask$2.call(AsyncTask.java:264) 02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 02-18 16:26:06.446: E/AndroidRuntime(1381): ... 5 more 

मैं समझ नहीं पा रहा हूं कि समस्या क्या है, क्योंकि समान ग्राहक पीसी पर काम करता है। आईपी ​​पते में कोई समस्या नहीं है, क्योंकि मैं एंड्रॉइड वर्चुअलडिवाइस से सर्वर का उपयोग कर सकता हूं।

एंड्रॉइड वर्जन 4.0.3 एपीआई संस्करण 15. क्लाइंट के लिए मैंने जर्सी 1.11 का इस्तेमाल किया।

संपादित करें

मैंने भी पूरी तरह से संपादन टेक्स्ट के साथ निकालने का प्रयास किया है, क्योंकि किसी ने मुझसे कहा था कि इसका प्रयोग नहीं किया जाना चाहिए। फिर भी, मुझे एक ही त्रुटि मिली मैं बस समझ नहीं पा रहा हूं कि मैं क्या कर रहा हूं गलत। अगर मुझे कोई और अतिरिक्त जानकारी दिखानी चाहिए, तो कृपया मुझे बताएं इसके अलावा, कोई भी विचार अच्छा है मैं एंड्रॉइड के लिए नया हूँ और मैंने शायद कुछ बेवकूफ गलतियां की हो।

Solutions Collecting From Web of "एंड्रॉइड पर जर्सी क्लाइंट – NullPointerException"

पॉल का सुझाव सही है उस विषय में मुझे थोड़ा सा गहरा मिला और एक कारण मिला।

एंड्रॉइड एपीके पैकेजिंग टूल (एसडीकेलिब.जेयर से एपीकेब्लूल्डर क्लास) विभिन्न फ़ोल्डर्स की अनदेखी करते हैं जबकि यह पैकेज बनाता है ( स्रोत )। उन फ़ोल्डर्स में से एक मेटा-आईएनएफ है – कोई फर्क नहीं पड़ता अगर इसकी संलग्न पुस्तकालय में या परियोजना के स्रोत फ़ोल्डर में।

जर्सी के संस्करण 1.8 (और संभवत: अन्य को भी, लेकिन मैंने इसका परीक्षण नहीं किया था) सर्विसफेंडर $ सेवाइटरेटर प्रोवाइडर के लिए कस्टम (डिफ़ॉल्ट रूप से एक मेटा-आईएनएफ / सेवाओं / जो कि एंड्रॉइड एपीके में मौजूद नहीं है) को लागू करना है कठिन कोडित प्रदाता वर्ग के नाम। लुकास द्वारा प्रस्तावित इस कार्यान्वयन पर मैं अपना कार्यान्वयन आधारित हूं:

 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import android.util.Log; import com.sun.jersey.spi.service.ServiceFinder.ServiceIteratorProvider; public class AndroidServiceIteratorProvider<T> extends ServiceIteratorProvider<T> { private static final String TAG = AndroidServiceIteratorProvider.class.getSimpleName(); private static final String MESSAGE = "Unable to load provider"; private static final HashMap<String, String[]> SERVICES = new HashMap<String, String[]>(); private static final String[] com_sun_jersey_spi_HeaderDelegateProvider = { "com.sun.jersey.core.impl.provider.header.MediaTypeProvider", "com.sun.jersey.core.impl.provider.header.StringProvider" }; private static final String[] com_sun_jersey_spi_inject_InjectableProvider = { }; private static final String[] javax_ws_rs_ext_MessageBodyReader = { "com.sun.jersey.core.impl.provider.entity.StringProvider", "com.sun.jersey.core.impl.provider.entity.ReaderProvider" }; private static final String[] javax_ws_rs_ext_MessageBodyWriter = { "com.sun.jersey.core.impl.provider.entity.StringProvider", "com.sun.jersey.core.impl.provider.entity.ReaderProvider" }; static { SERVICES.put("com.sun.jersey.spi.HeaderDelegateProvider", com_sun_jersey_spi_HeaderDelegateProvider); SERVICES.put("com.sun.jersey.spi.inject.InjectableProvider", com_sun_jersey_spi_inject_InjectableProvider); SERVICES.put("javax.ws.rs.ext.MessageBodyReader", javax_ws_rs_ext_MessageBodyReader); SERVICES.put("javax.ws.rs.ext.MessageBodyWriter", javax_ws_rs_ext_MessageBodyWriter); SERVICES.put("jersey-client-components", new String[]{}); SERVICES.put("com.sun.jersey.client.proxy.ViewProxyProvider", new String[]{}); } @SuppressWarnings("unchecked") @Override public Iterator<Class<T>> createClassIterator(Class<T> service, String serviceName, ClassLoader loader, boolean ignoreOnClassNotFound) { String[] classesNames = SERVICES.get(serviceName); int length = classesNames.length; ArrayList<Class<T>> classes = new ArrayList<Class<T>>(length); for (int i = 0; i < length; i++) { try { classes.add((Class<T>) Class.forName(classesNames[i])); } catch (ClassNotFoundException e) { Log.v(TAG, MESSAGE,e); } } return classes.iterator(); } @Override public Iterator<T> createIterator(Class<T> service, String serviceName, ClassLoader loader, boolean ignoreOnClassNotFound) { String[] classesNames = SERVICES.get(serviceName); int length = classesNames.length; ArrayList<T> classes = new ArrayList<T>(length); for (int i = 0; i &lt; length; i++) { try { classes.add(service.cast(Class.forName(classesNames[i]) .newInstance())); } catch (IllegalAccessException e) { Log.v(TAG, MESSAGE,e); } catch (InstantiationException e) { Log.v(TAG, MESSAGE,e); } catch (ClassNotFoundException e) { Log.v(TAG, MESSAGE,e); } } return classes.iterator(); } } 

मैंने ज्यादातर वर्गों को हटा दिया क्योंकि मैंने उनका इस्तेमाल नहीं किया था और वे Dalvik vm पर सत्यापन त्रुटियों के कारण थे …

नोट: इसका मतलब है कि इस क्रियान्वयन के साथ आप केवल जर्सी (केवल स्ट्रिंग की आवश्यकता) के आधार पर हेडर्स / प्रकार के उप-समूह का उपयोग कर सकते हैं। अन्य प्रकारों को समर्थन देने के लिए आपको जर्सी-क्लाइंट.जर (या लुकास के क्रियान्वयन से) के मेटा-आईएनएफ / सेवा फ़ोल्डर में स्थित प्रदाताओं को जोड़ना होगा और जांच लें कि क्या वे एंड्रॉइड पर सत्यापन त्रुटियों का कारण नहीं हैं।

उपरोक्त कोड का प्रयोग निम्न प्रकार से किया जाना चाहिए:

 ServiceFinder.setIteratorProvider(new AndroidServiceIteratorProvider()); Client client = Client.create(); 

संपादित करें:

ऐसा लगता है कि समस्या एंड्रॉइड-मेवेन-प्लगइन में तय की गई है।

मोजा … @ जीमेल.कॉम ने लिखा:

फिक्स के साथ पुल का अनुरोध मास्टर में विलय कर दिया गया था और 3.2.1 के साथ जारी किया जाएगा:

कोड के बाद:

com / सूर्य / जर्सी / API / ग्राहक / ClientResponse.getType ()

 613 public MediaType getType() { 614 String ct = getHeaders().getFirst("Content-Type"); 615 return (ct != null) ? MediaType.valueOf(ct) : null; 616 } 

मैं जांच करूंगा कि मीडियाटाइप द्वारा इस्तेमाल किया गया प्रतिनिधि null नहीं है

javax / ws / रु / कोर / MediaType.valueOf (java.lang.String)

 118 public static MediaType valueOf(String type) throws IllegalArgumentException { 119 return delegate.fromString(type); 120 } 

ऐसा लगता है कि delegate एक ग्राहक (एंड्रॉइड) के लिए null और आपके अन्य क्लाइंट के लिए null नहीं है

इस पर एक नज़र डालें कि प्रतिनिधि कैसे शुरू किया जाए, इसके लिए एक विचार प्राप्त करें। यह आपकी जांच में मदद कर सकता है

javax / ws / रु / ext / RuntimeDelegate.java