Dies ist eine Funktion der Klasse A, in der ich meinen Wert an einen Klassennamen übergebe, um seine Registerfunktion zu bestätigen.Warum bekomme ich null Zeigerausnahme, obwohl es einen Wert gibt, wenn println angezeigt wird?
private void registerOrder() {
confirm.register(id);
}
Dies ist Klasse bestätigen. In dieser Klasse habe ich geplant, Daten innerhalb des Servers zu veröffentlichen. Es gibt keine Fehler in der URL. Ich habe diesen Code "System.out.println (" wei "+ getPostDataString (postDataParams));" und ich habe meinen Wert bekommen. Aber das System sagt Nullzeiger. Gibt es Fehler in anderen Teilen des Codes?
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();
}
}
println Nachricht benötigt, tritt auf, wenn es keine Daten in Log-Anweisungen angezeigt ist oder SOPs. Fügen Sie einen Debugger hinzu und überprüfen Sie, ob Ihr Wert erhalten wird oder nicht. –
Werfen Sie einen Blick auf den Stacktrace von NPE und sehen Sie, wo es geworfen wird. – gmaslowski
für das Debugging, sollte ich so schreiben? Log.d (getPostDataString (postDataParams), "onCreate()"); –