Как разобрать параметры из asynctask для метода?

У меня проблема с кодом ниже. Я проанализировал строку JSON из базы данных на Android, но я не могу запустить код.

Я использовал asynctask класс для doInBackground чтобы получить JSONparse из базы данных и дал его onPostExecute метод.

Я хотел бы дать параметры для метода setCharges, чтобы получить параметры и устанавливает обвинения для просмотра текста Android в двойном размере.

Пожалуйста, совет, если что-то не так с моим кодом.

Заранее спасибо.

Код ниже — скрипт PHP

<?php

require("config.php");

//initial query
$query = "SELECT fHAH,sHAH,rHAH FROM charges";

//execute query

$stmt   = $db->prepare($query);
$result = $stmt->execute($query_params);

// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();


if ($rows) {

$response["charges"] = array();

foreach ($rows as $row) {

$charge = array();

$charge["fHAH"] = $row["fHAH"];
$charge["sHAH"]    = $row["sHAH"];
$charge["rHAH"]  = $row["rHAH"];


//update our repsonse JSON data
array_push($response["charges"], $post);
}

// echoing JSON response
echo json_encode($response);


}

Это класс AsyncTask

    private class getLoadData extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {

JSONParser jParser = new JSONParser();
json = jParser.getJSONDataFromURL(chargesSettingURL);

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);

double fCharge = 0.0;
double sCharge = 0.0;
double rCharge = 0.0;

try {

chargesJSONArray = json.getJSONArray(TAG_CHARGES);

for (int i = 0; i < chargesJSONArray.length(); i++) {
JSONObject c = chargesJSONArray.getJSONObject(i);

fCharge = Double.parseDouble(c.getString(TAG_FHAH));
sCharge = Double.parseDouble(c.getString(TAG_SHAH));
rCharge = Double.parseDouble(c.getString(TAG_RHAH));


setCharges(fCharge, sCharge, rCharge);

}

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

}
}

И это метод setCharges

public void setCharges(double fHAH, double sHAH, double rHAH) {
this.F_HALF_AN_HOUR = fHAH;
this.S_HALF_AN_HOUR = sHAH;
this.R_HALF_AN_HOURS = rHAH;
}

Я включил журнал ошибок

08-09 17:56:35.650    1860-2094/com.gpark.nerdherd.fyp

E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.gpark.nerdherd.fyp, PID: 1860
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at 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)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.StringBuilder.toString()' on a null object reference
at com.gpark.nerdherd.fyp.libs.JSONParser.getJSONDataFromURL(JSONParser.java:45)
at com.gpark.nerdherd.fyp.libs.CalculateParking$getLoadData.doInBackground(CalculateParking.java:42)
at com.gpark.nerdherd.fyp.libs.CalculateParking$getLoadData.doInBackground(CalculateParking.java:36)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at 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)
08-09 17:56:43.620    2110-2110/com.gpark.nerdherd.fyp D/Atlas﹕ Validating map...
08-09 17:56:43.980    2110-2125/com.gpark.nerdherd.fyp D/﹕ HostConnection::get() New Host Connection established 0x7fd75984f1a0, tid 2125
08-09 17:56:44.000    2110-2125/com.gpark.nerdherd.fyp I/OpenGLRenderer﹕ Initialized EGL, version 1.4
08-09 17:56:44.060    2110-2125/com.gpark.nerdherd.fyp D/OpenGLRenderer﹕ Enabling debug mode 0
08-09 17:56:44.070    2110-2125/com.gpark.nerdherd.fyp W/EGL_emulation﹕ eglSurfaceAttrib not implemented
08-09 17:56:44.070    2110-2125/com.gpark.nerdherd.fyp W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fd75984e300, error=EGL_SUCCESS
08-09 17:56:47.150    2110-2129/com.gpark.nerdherd.fyp E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.gpark.nerdherd.fyp, PID: 2110
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at 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)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.StringBuilder.toString()' on a null object reference
at com.gpark.nerdherd.fyp.libs.JSONParser.getJSONDataFromURL(JSONParser.java:45)
at com.gpark.nerdherd.fyp.libs.CalculateParking$getLoadData.doInBackground(CalculateParking.java:42)
at com.gpark.nerdherd.fyp.libs.CalculateParking$getLoadData.doInBackground(CalculateParking.java:36)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at 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)
08-09 17:56:47.270    2110-2133/com.gpark.nerdherd.fyp I/Process﹕ Sending signal. PID: 2110 SIG: 9

Это getJSONDataFromURL

public JSONObject getJSONDataFromURL(final String url) {

try {

urlObj = new URL(url);
httpURLConnection = (HttpURLConnection) urlObj.openConnection();
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Accept-Charset", charset);
httpURLConnection.setReadTimeout(10000);
httpURLConnection.setConnectTimeout(15000);
httpURLConnection.connect();
paramsString = sbParams.toString();

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

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

try {
//Receive the response from the server
InputStream in = new BufferedInputStream(httpURLConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "iso-8859-1"), 8);

String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}

in.close();
json = result.toString();

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

httpURLConnection.disconnect();

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

// return JSON Object
return jObj;

}

1

Решение

Вы, кажется, изобрели $post переменная в вашем коде PHP. Кроме того, вы, кажется, более сложные вещи

Попробуй это

require("config.php");
//initial query
$query = "SELECT fHAH,sHAH,rHAH FROM charges";

$response = array();

// as there is nothing to prepare use ->query
foreach ($db->query($sql) as $row)

$response["charges"][] = $row;
}

echo json_encode($response);

Теперь у вас есть правильный объект json для обработки в коде Java на устройстве Android

Теперь, если вы прочитав это, вы узнаете, как анализировать строку JSON в объект JSON в JAVA

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector