Hi can you guys help me because I'm stuck here like forever and everytime I'm getting my JSON from my webhost its always null on my webhost and when I'm checking the string using Log.d
this error shows NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object
Here are my codes.
<?PHP
include_once("connection.php");
session_start();
$where = '';
if (isset($_GET['driverOwner']) && isset($_GET['roles']) && isset ($_GET['driverStatus'])){
$where = " WHERE driverOwner = '".addslashes($_GET['driverOwner'])."' AND roles = '".addslashes($_GET['roles'])."' AND driverStatus = '".addslashes($_GET['driverSTatus'])."'";
}
$query = "SELECT * FROM tbl_user ".$where."";
$result = mysqli_query($conn, $query);
if($result)
{
while ($row = mysqli_fetch_assoc($result)) {
$data[] = $row;
}
echo json_encode($data);
}
mysqli_close($conn);
?>
public class Drivers1 {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Connector {
public static HttpURLConnection connect(String urlAddress){
try{
URL url = new URL(urlAddress);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//SET PROPERTIES
con.setRequestMethod("GET");
con.setConnectTimeout(20000);
con.setReadTimeout(20000);
con.setDoInput(true);
return con;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
public class DataParser extends AsyncTask<Void,Void,Integer> {
Context c;
Spinner spDriver;
String jsonData;
ProgressDialog pd;
ArrayList<String> driver = new ArrayList<>();
public DataParser(Context c, Spinner sp, String jsonData) {
this.c = c;
this.spDriver = sp;
this.jsonData = jsonData;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(c);
pd.setTitle("Fetch");
pd.setMessage("Please wait... Getting drivers");
pd.show();
}
@Override
protected Integer doInBackground(Void... voids) {
return this.parseData();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
pd.dismiss();
if(result == 0 ){
Toast.makeText(c, "Failed", Toast.LENGTH_SHORT).show();
}else {
//BIND
ArrayAdapter adapter = new ArrayAdapter(c,android.R.layout.simple_list_item_1, driver);
spDriver.setAdapter(adapter);
spDriver.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(c, driver.get(i), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}
private int parseData(){
try {
JSONArray ja = new JSONArray(jsonData);
JSONObject jo = null;
driver.clear();
Drivers1 s=null;
for (int i=0;i<ja.length();i++){
jo=ja.getJSONObject(i);
int id=jo.getInt("userID");
String name=jo.getString("firstname");
s = new Drivers1();
s.setId(id);
s.setName(name);
driver.add(name);
}
return 1;
} catch (JSONException e) {
e.printStackTrace();
}
return 0;
}
}
public class Downloader extends AsyncTask<Void,Void,String> {
Context c;
String urlAddress;
Spinner spDriver;
ProgressDialog pd;
public Downloader(Context c, String urlAddress, Spinner spDriver) {
this.c = c;
this.urlAddress = urlAddress;
this.spDriver = spDriver;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(c);
pd.setTitle("Fetch(Downloader)");
pd.setMessage("Please wait... Getting Drivers");
pd.show();
}
@Override
protected String doInBackground(Void... voids) {
return this.downloadData();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d("Downloader",""+ s);
pd.dismiss();
if (s == null) {
Toast.makeText(c, "Unable to retrieve", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(c, "Success!", Toast.LENGTH_SHORT).show();
//CALL PARSER CLASS TO PARSE
DataParser parser = new DataParser(c,spDriver,s);
parser.execute();
}
}
private String downloadData(){
HttpURLConnection con = Connector.connect(urlAddress);
if(con == null){
return null;
}
InputStream is=null;
try {
is = new BufferedInputStream(con.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
StringBuffer response = new StringBuffer();
if (br != null) {
while ((line = br.readLine()) != null){
response.append(line+"
");
}
}else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insert);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Spinner spDriver = (Spinner) findViewById(R.id.spDriver);
String url = "http://carkila.esy.es/carkila/getDriver.php?driverOwner="+ pref.getString("username","")+"&roles=driver&driverStatus=active";
new Downloader(InsertActivity.this,url ,spDriver).execute();
}
Sorry for the long post but please help me. :c thaaaaanks :)
Error when
Log.d("Downlaoder",s.toString());
is tested on Downloader.java.
Process: com.example.kun.carkila, PID: 31098
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
at com.example.kun.carkila.mMySQL.Downloader.onPostExecute(Downloader.java:56)
at com.example.kun.carkila.mMySQL.Downloader.onPostExecute(Downloader.java:24)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
In your DataParser.Java
class result 0 was return regardless.
private int parseData(){
try {
JSONArray ja = new JSONArray(jsonData);
JSONObject jo = null;
driver.clear();
Drivers1 s=null;
for (int i=0;i<ja.length();i++){
jo=ja.getJSONObject(i);
int id=jo.getInt("userID");
String name=jo.getString("firstname");
s = new Drivers1();
s.setId(id);
s.setName(name);
driver.add(name);
}
return 1;
} catch (JSONException e) {
e.printStackTrace();
}
return 0; //here it will go on
}
Please add a log to check what was returned, if it is returning 0 you must get Failed
sort of toast.