这是我的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 日志)返回写入答案,但应用程序无法得到它。