2016-04-20 11 views
4

これは、私の値をクラス名に渡してそのレジスタ関数に確認するクラスAの関数です。printlnの値が表示されていても、なぜnullポインタ例外が発生するのですか?

private void registerOrder() { 
    confirm.register(id); 
} 

これはクラス確認です。このクラスでは、サーバー内にデータを投稿する予定があります。 URLに間違いはありません。私はこのコードをprintln "System.out.println(" wei "+ getPostDataString(postDataParams));"私は自分の価値を得ている。しかし、システムはヌルポインタを言っています。コードの他の部分に間違いはありますか?

public class confirm { 
private static final String REGISTER_URL = 
"http://192.168.43.214/apexStore2/confirm.php"; 

public static void register(String id) { 
    class RegisterUser extends AsyncTask<String, Void, String> { 
     ProgressDialog loading; 
@Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      loading.dismiss(); 
     } 
    @Override 
     protected String doInBackground(String... params) { 

      HashMap<String, String> data = new HashMap<>(); 
      data.put("product_id",params[0]); 

      String result = sendPost(REGISTER_URL,data); 

      return result; 
     } 
    } 

    RegisterUser ru = new RegisterUser(); 
    ru.execute(String.valueOf(id)); 
} 
public static String sendPost(String requestURL, 
           HashMap<String, String> postDataParams) { 

    URL url; 
    String response = " "; 
    try { 
     url = new URL(requestURL); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 
     conn.setRequestProperty("Content-Length", "" +      
    Integer.toString(getPostDataString(postDataParams).getBytes().length)); 
     conn.setRequestProperty("Content-Language", "en-US"); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 


     OutputStream os = conn.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 
     writer.write(getPostDataString(postDataParams)); 
     System.out.println("wei" + getPostDataString(postDataParams)); 

     writer.flush(); 
     writer.close(); 
     os.close(); 
     int responseCode=conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      BufferedReader br=new BufferedReader(new 
    InputStreamReader(conn.getInputStream())); 
      response = br.readLine(); 
     } 
     else { 
      response="Error Registering"; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 

private static String getPostDataString(HashMap<String, String> params) 
throws UnsupportedEncodingException { 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 
    for(Map.Entry<String, String> entry : params.entrySet()){ 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 
} 
+0

で使用され、ログ・ステートメントに表示するデータがない場合に発生しますかSOPの。デバッガをアタッチし、値が取得されているかどうかを確認してください。 –

+0

NPEのスタックトレースを見て、どこからスローされたかを確認してください。デバッグ用の – gmaslowski

+0

、これはどうすればいいですか? Log.d(getPostDataString(postDataParams)、 "onCreate()"); –

答えて

0

コードの読み取りconfirm.register(id)を呼び出すと、NULLポインタ例外が発生します。あなたは、最終的なクラスとして宣言する必要が静的にクラスを使用する場合は

public final class confirm {...} 

あなたのためにそれが動作するはずです。それでもあなたも、あなたのクラスのインスタンスを作成することにより、最終的な識別子を使用せずに、あなたの問題を解決することができます:

confirm conf = new confirm(); 
conf.register(id); 

私はまた、あなたのクラス名が小文字で始まることを見てきました。大文字で始まるクラス名を作成することをお勧めします。

エラーが解決しない場合は、ここにエラー情報を貼り付けてください。

+0

nullポインタは、loading.dismiss()を削除することによって解決されます。 frompostexecuteから。ただし、データはデータベースに渡されません。私の方法に何か問題がありますか? –

2

あなたがに割り当てられることはありませんインスタンス変数、持っている:

ProgressDialog loading; 

をし、メッセージを必要とするのprintln

protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
    loading.dismiss();  // expect NPE 
} 
+0

私はデバッグするとき、私は値を得ます –

+0

あなたはどんな価値を意味しますか? – laune

+0

この1つSystem.out.println( "wei" + getPostDataString(postDataParams)); –

関連する問題