这是我的AsyncTask
课:
公共类 JSONParser 扩展 AsyncTask { 公共接口 MyCallbackInterface { public void onRequestComplete(JSONObject 结果); } 私有 MyCallbackInterface mCallback; 公共 JSONParser(MyCallbackInterface 回调) { mCallback = 回调; 上下文上下文 = (上下文) 回调; } 公共 JSONObject getJSONFromUrl(字符串 url){ // 发出 HTTP 请求 DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpPost = new HttpGet(url); HttpResponse getResponse = null; 最终的 HttpParams httpParameters = httpClient.getParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, 10 * 10000); HttpConnectionParams.setSoTimeout (httpParameters, 10 * 10000); 尝试 { getResponse = httpClient.execute(httpPost); } 捕捉(ClientProtocolException e2){ e2.printStackTrace(); } 捕捉(IOException e2){ e2.printStackTrace(); } 最终 int statusCode = getResponse.getStatusLine().getStatusCode(); 如果(状态代码!= HttpStatus.SC_OK){ Log.w(getClass().getSimpleName(), "错误" + statusCode + " for URL " + url); 返回空值; } HttpEntity getResponseEntity = getResponse.getEntity(); 字符串 json = null; 尝试 { json = EntityUtils.toString(getResponseEntity); } 捕捉(ParseException e1){ e1.printStackTrace(); } 捕捉(IOException e1){ e1.printStackTrace(); } JSONObject jObj = null; // 尝试将字符串解析为 JSON 对象 尝试 { jObj = 新的 JSONObject(json); } 捕捉(JSONException e){ Log.e("JSON Parser", "解析数据出错" + e.toString()); } // 返回 JSON 字符串 返回 obj; } @覆盖 受保护的 JSONObject doInBackground(String...params) { 字符串 url = 参数 [0]; 返回 getJSONFromUrl(url); } @覆盖 受保护的无效 onPostExecute(JSONObject 结果){ mCallback.onRequestComplete(结果); } }
我在 UI(类RegisterActivity extends Activity implements MyCallbackInterface
)中得到 JSON 答案:
公共类 RegisterActivity 扩展 Activity 实现 MyCallbackInterface{ ... @覆盖 公共无效 onRequestComplete(JSONObject json) { //租用解析并显示json ...
我JSONParser
从同一个 UI(类RegisterActivity extends Activity implements MyCallbackInterface
)调用
JSONParser mJSONParser1 = new JSONParser(context111); mJSONParser1.execute(SERVER_URL+"?method=registration&user="+user+"&pass="+pass+"®Id="+regId);
例外情况:
10-03 15:58:02.303: W/System.err(22414): java.net.SocketException: 连接超时 10-03 15:58:02.350: W/System.err(22414): at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method) 10-03 15:58:02.366: W/System.err(22414): 在 dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 10-03 15:58:02.366: W/System.err(22414): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 10-03 15:58:02.366: W/System.err(22414): 在 com.androidhive.pushnotifications.JSONParser.getJSONFromUrl(JSONParser.java:72) 10-03 15:58:02.366: W/System.err(22414): 在 com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:121) 10-03 15:58:02.366: W/System.err(22414): 在 com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:1) 10-03 15:58:02.366: W/System.err(22414): 在 android.os.AsyncTask$2.call(AsyncTask.java:185) 10-03 15:58:02.366: W/System.err(22414): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 10-03 15:58:02.366: W/System.err(22414): 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 10-03 15:58:02.366: W/System.err(22414): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 10-03 15:58:02.374: W/System.err(22414): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 10-03 15:58:02.374: W/System.err(22414): 在 java.lang.Thread.run(Thread.java:1019) 10-03 15:58:02.374: W/dalvikvm(22414): threadid=9: 线程以未捕获的异常退出 (group=0x40018560) 10-03 15:58:02.374:E/AndroidRuntime(22414):致命异常:AsyncTask #1 10-03 15:58:02.374: E/AndroidRuntime(22414): java.lang.RuntimeException: 执行 doInBackground() 时出错 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 android.os.AsyncTask$3.done(AsyncTask.java:200) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.FutureTask.setException(FutureTask.java:125) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.lang.Thread.run(Thread.java:1019) 10-03 15:58:02.374:E/AndroidRuntime(22414):由:java.lang.NullPointerException 引起 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 com.androidhive.pushnotifications.JSONParser.getJSONFromUrl(JSONParser.java:81) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:121) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:1) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 android.os.AsyncTask$2.call(AsyncTask.java:185) 10-03 15:58:02.374: E/AndroidRuntime(22414): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 10-03 15:58:02.374: E/AndroidRuntime(22414): ... 4 更多
我可以访问服务器。它适用于三星 s2(android 4.1.2),但不适用于摩托罗拉(带有 android 2.3.3)。
任何想法都将受到欢迎。
我认为问题在于异步任务......但是......没有更多的帮助。
PP php 服务器向请求(php 日志)返回写入答案,但应用程序无法得到它。