2014-11-28 3 views
0

내 응용 프로그램에는 json이 url-> php 스크립트를 호출하고 mysql 데이터베이스에 데이터를 검색하고 추가하는 params를 사용하여 http 요청을하는 여러 가지 활동이 있습니다. 지금까지 좋은 모든 것. 최근 활동은 5 개의 매개 변수를 사용하고 다른 두 매개 변수가 일치하는 경우 3 개의 매개 변수를 설정하는 업데이트 문을 실행합니다. 이 문장의 시점에서 로그를 추가 :
JSONObject json = jParser.makeHttpRequest(url_update_customer, "GET", params);
것은 나에게 브라우저에이 JSONParser.java is: website link/update_customer.php?CustomerId=1018&FirstName=rob&LastName=fghj&EmailAddress=fhghg%40yyghh&DeviceId=357647053761497
내가 컷과 과거의 호출을 표시하고 내가 얻을 실행 :
{"success":1,"message":"Customer row successfully updated for rob,fghj,[email protected]"}JSONObject json = jParser.makeHttpRequest 치명적인 오류

PHP 스크립트에서 나는 내 고객 테이블에서 업데이트되는 세부 정보를 볼 수 있도록 업데이트되는 datetime 열이 있어야합니다. 모든 작업이 정상적으로 작동합니다. 내 문제는 업데이트를 실행하기 위해 버튼을 클릭 할 때 치명적인 오류가 발생하고 이유를 알 수없는 경우입니다. 내가 디버그에서 실행했지만 오류가 어디에서 오는 다만 말할 수 없다, 로그 캣은 말합니다 :

11-28 15:43:35.437: D/json before JSONobject(9148): http://www.mywebsite.co.uk/update_customer.php 
11-28 15:43:35.437: D/url from JSON Parser(9148): http://www.mywebsite.co.uk/update_customer.php?CustomerId=1018&FirstName=rob&LastName=fghj&EmailAddress=fhghg%40yyghh&DeviceId=357647053761497 
11-28 15:43:35.445: D/AndroidRuntime(9148): Shutting down VM 
11-28 15:43:35.445: W/dalvikvm(9148): threadid=1: thread exiting with uncaught exception (group=0x4178a2a0) 
11-28 15:43:35.468: E/AndroidRuntime(9148): FATAL EXCEPTION: main 
11-28 15:43:35.468: E/AndroidRuntime(9148): android.os.NetworkOnMainThreadException 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at com.example.uitest4.common.JSONParser.makeHttpRequest(JSONParser.java:62) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at com.example.uitest4.PlaceOrderActivity.updateCustomer(PlaceOrderActivity.java:265) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at com.example.uitest4.PlaceOrderActivity$6.onClick(PlaceOrderActivity.java:228) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.view.View.performClick(View.java:4274) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.view.View$PerformClick.run(View.java:17357) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.os.Handler.handleCallback(Handler.java:615) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.os.Looper.loop(Looper.java:137) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at android.app.ActivityThread.main(ActivityThread.java:4949) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810) 
11-28 15:43:35.468: E/AndroidRuntime(9148):  at dalvik.system.NativeStart.main(Native Method) 
11-28 15:43:45.312: I/Process(9148): Sending signal. PID: 9148 SIG: 9 
11-28 15:43:46.578: D/dalvikvm(9245): GC_CONCURRENT freed 500K, 18% free 8123K/9863K, paused 12ms+2ms, total 38ms 

입니다 OnClickListener를 버튼을 통해 호출 된 메소드의 코드 :

public void updateCustomer() { 
    final DatabaseHelper dbHelper = new DatabaseHelper(this); 

    // JSON Node names 

    // Building Parameters 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    // getting JSON string from URL 
    Log.d("url customer update ",String.valueOf(url_update_customer) + " " + dbHelper.getCustomerId() + " " + dbHelper.getCustomerFirstName()); 
    params.add(new BasicNameValuePair("CustomerId",dbHelper.getCustomerId())); 
    params.add(new BasicNameValuePair("FirstName",editfirstname.getText().toString())); 
    params.add(new BasicNameValuePair("LastName",editlastname.getText().toString())); 
    params.add(new BasicNameValuePair("EmailAddress",editemailaddress.getText().toString())); 
    params.add(new BasicNameValuePair("DeviceId",dbHelper.getCustomerDeviceId())); 
    Log.d("json before JSONobject",url_update_customer); 

    JSONObject json = jParser.makeHttpRequest(url_update_customer, "GET", params); 

    // Check your log cat for JSON reponse 

    if (json != null) { 
     try { 
     // Checking for SUCCESS TAG 
     int success = json.getInt(TAG_SUCCESS); 
      if (success == 1) { 
       Log.d("json success update customer ",""); 
       // customer details updated, run insert_order_status 
       insertOrderStatus();  
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

언급 한 바와 같이 나는 같은 접근법을 따르는 다양한 다른 활동을하고있다. 그러나 이것은 나를 당황하게한다. 어떤 도움이 필요하면 감사드립니다. 더 자세히 알고 싶으면 감사합니다.

+0

또한 이전에이 예외가 발생했습니다, 당신은 메인 스레드에서 일부 네트워크 관련 질문을하려고 할 때 발생합니다. 별도의 스레드에서 해보면 작동해야합니다. –

답변

1

AsyncTask를 사용하여 백그라운드에서 네트워킹을 수행하는 것은 하나의 샘플 코드입니다.

https://stackoverflow.com/a/13172283/3225831

+0

이것은 관련성이 있습니다 : https://developer.android.com/training/basics/network-ops/connecting.html 말의 바로부터 AsyncTask를 사용해야하는 이유를 설명합니다. – CreationEdge

+0

감사합니다. 비동기 접근법이 효과가 있고 나는 매우 행복한 토끼입니다 !! 위대한 사이트, 다시 한 번 감사합니다 –

+0

실제로 다른 문제가있는 것처럼 보입니다. HTTP 요청은 정상적으로 작동하고 데이터베이스 업데이트는 있지만 위 코드의 if (json = null) 섹션에는 들어 가지 않습니다. 거기에서 다른 활동을 시작하되 그 기준을 만족시켜야합니다. 아무도 분명히 잘못한 일을 저를 감지 할 수 있습니까? 감사합니다 –