2017-08-26 9 views
0

私はデータベースにいくつかのデータを保存するアプリケーションを作っています。 私はPHPで作業しています。クライアント側では、入力を取得してPHPファイルに渡すこのファイルがあります。サーバーからの応答を受信する際にエラーが発生しましたか?

8月26日12時51分:私はデータを提出

public class JSONParser { 

String charset = "UTF-8"; 
HttpURLConnection conn; 
DataOutputStream wr; 
StringBuilder result; 
URL urlObj; 
JSONObject jObj = null; 
StringBuilder sbParams; 
String paramsString; 

public JSONObject makeHttpRequest(String url, String method, 
            HashMap<String, String> params) { 

    sbParams = new StringBuilder(); 
    int i = 0; 
    for (String key : params.keySet()) { 
     try { 
      if (i != 0){ 
       sbParams.append("&"); 
      } 
      sbParams.append(key).append("=") 
        .append(URLEncoder.encode(params.get(key), charset)); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     i++; 
    } 

    if (method.equals("POST")) { 
     // request method is POST 
     try { 
      urlObj = new URL(url); 
      conn = (HttpURLConnection) urlObj.openConnection(); 
      conn.setDoOutput(true); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Accept-Charset", charset); 
      conn.setReadTimeout(10000); 
      conn.setConnectTimeout(15000); 
      conn.connect(); 

      paramsString = sbParams.toString(); 

      wr = new DataOutputStream(conn.getOutputStream()); 
      wr.writeBytes(paramsString); 
      wr.flush(); 
      wr.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    else if(method.equals("GET")){ 
     // request method is GET 

     if (sbParams.length() != 0) { 
      url += "?" + sbParams.toString(); 
     } 

     try { 
      urlObj = new URL(url); 
      conn = (HttpURLConnection) urlObj.openConnection(); 
      conn.setDoOutput(false); 
      conn.setRequestMethod("GET"); 
      conn.setRequestProperty("Accept-Charset", charset); 
      conn.setConnectTimeout(15000); 
      conn.connect(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    try { 
     //Receive the response from the server 
     InputStream in = new BufferedInputStream(conn.getInputStream()); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     result = new StringBuilder(); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      result.append(line); 
     } 

     Log.d("JSON Parser", "result: " + result.toString()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    conn.disconnect(); 

    // try parse the string to a JSON object 
    try { 
     System.out.println(jObj); 
     jObj = new JSONObject(result.toString()); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON Object 
    return jObj; 
} 

そして、これは私がすべての時間を取得エラーです:

new AsyncTask<String, String, String>() { 

       JSONParser jsonParser = new JSONParser(); 
       private ProgressBar pBar; 
       private String url_post_pet = "http://192.168.0.13/Android/post_pet.php"; 

       // JSON Node names 
       private static final String TAG_SUCCESS = "success"; 

       /** 
       * Before starting background thread Show Progress Dialog 
       */ 
       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
        //pBar = new ProgressBar(); 
        //pBar.setIndeterminate(false); 
        //pBar.setVisibility(View.VISIBLE); 
       } 

       @Override 
       protected String doInBackground(String... args) { 
        // Building Parameters 
        HashMap<String, String> params = new HashMap<>(); 
        params.put("name", a); 
        params.put("breed", BREED); 
        params.put("type", TYPE); 
        params.put("images", "Whatever"); 
        params.put("description", c); 
        params.put("coords", b); 

        // getting JSON Object 
        // Note that create product url accepts POST method 
        JSONObject json = jsonParser.makeHttpRequest(url_post_pet, 
          "POST", params); 
        // check log cat for response 
        Log.d("Create Response", json.toString()); 

        // check for success tag 
        try { 
         int success = json.getInt(TAG_SUCCESS); 

         if (success == 1) { 
          // successfully created product 
          Intent i = new Intent(getApplicationContext(), MainActivity.class); 
          startActivity(i); 

          // closing this screen 
          finish(); 
         } else { 
          // failed to create product 
         } 
        } catch (JSONException e) { 
         System.out.println("exception" + e); 
         e.printStackTrace(); 
        } 
        System.out.println("nul"); 
        return null; 
       } 

       /** 
       * After completing background task Dismiss the progress dialog 
       **/ 
       protected void onPostExecute(String file_url) { 
        // dismiss the dialog once done 
        //pBar.dismiss(); 
       } 
      }.execute(); 

     } 
    }); 
} 

はまた、私はこのJSONParserを持っています: 08.236 5089-5156/chtecnologies.myapplication D/JSON Parser:結果:08-26 12:51:08.239 5089-5156/chtecnologies.myapplication E/JSONパーサー:データの解析エラーorg.json.JSONException:文字0での入力の終了 08-26 12:51:08.793 5089-5096/chtecnologieすべてのスレッドを中断しました:137.277ms 08-26 12:51:09.267このスレッドに返信します...返信> 075355156/chtecnologies.myapplication E/AndroidRuntime:致命的な例外:AsyncTask#1 プロセス:chtecnologies.myapplication、PID:5089 java.lang.RuntimeException:アンドロイド.os.AsyncTaskでdoLockExceptionを実行中にエラーが発生しました( ) .done(AsyncTask.java:304) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util .concurrent.FutureTask.ru n(FutureTask.java:242) android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) によって引き起こされた:java.lang.NullPointerException:仮想メソッド 'java.lang .String(null)オブジェクトリファレンスの.String(org.json.JSONObject.toString() ')。 、chtecnologies.myapplication.PostPet $ 4 $ 1.doInBackground(PostPet.java:154) at chtecnologies.myapplication.PostPet $ 4 $ 1.doInBackground(PostPet.java :118) android.os.AsyncTask $ 2.call(AsyncTask.java:292) java.util.concurrent.FutureTask.run(FutureTask.java:237) android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java :231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run (Thread.java:818)

データは正常にデータベースに格納されますが、JSONParserに問題があるようですが、PHPファイルの結果を取得できません。

JSONParserファイルや他の場所に問題がないか教えてください。これは私のアプリケーションでサーバーを実装する初めてです、私はあなたが私を助けることを願っています!ありがとう

答えて

1

あなたがデータを送信している方法は怪しいようです。送信したい場合はPOSTのデータが

String postParam = "name=" + a + "&breed=" + BREED + "&type=" + "&images=" + 
         Whatever + "&description=" + c + "&coords=" + b; 

try{ 
       URL url = new URL(url); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

       connection.setRequestMethod("POST"); 
       connection.setDoOutput(true); 
       connection.setDoInput(true); 
       connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); 

       OutputStream os = connection.getOutputStream(); 
       os.write(postParam.getBytes()); 
       os.flush(); 
       os.close(); 

       // Fetching the response code 
       responseCode = connection.getResponseCode(); 
       Log.d(TAG, "POST Response Code: " + responseCode); 
} catch(Exception e) { 
       e.printStackTrace(); 
} 

connection.setRequestMethodようHttpURLConnectionを使用する - セットの方法は、あなたがGET/POST

connection.setDoOutput(真)を使用してデータを送信したい - にあなたは(もしあれば)

データを送信した後に入力を受け取るようにするには - あなたは

connection.setDoInput(真)出力を送ってみましょう

これがあなたの問題を解決することを願っています!

関連する問題