невозможно получить JSON в счетчик

#java #php #android #json #android-json

#java #php #Android #json #android-json

Вопрос:

Привет, ребята, можете ли вы мне помочь, потому что я застрял здесь, как навсегда, и каждый раз, когда я получаю свой JSON с моего веб-хостинга, на моем веб-хостинге всегда null, и когда я проверяю строку с помощью Log.d этой ошибки, отображается NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object

Вот мои коды.

PHP для получения JSON

 <?PHP
include_once("connection.php");

session_start();

$where = '';
if (isset($_GET['driverOwner']) amp;amp; isset($_GET['roles']) amp;amp; 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);

?>
 

Drivers1.java

 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;
}
}
 

DataParser.java

 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;
}
}
 

Downloader.java

 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 "n");
            }
        }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","") "amp;roles=driveramp;driverStatus=active";

    new Downloader(InsertActivity.this,url ,spDriver).execute();
}
 

Извините за длинный пост, но, пожалуйста, помогите мне. : c thaaaaanks 🙂

Редактировать

Ошибка при Log.d("Downlaoder",s.toString()); тестировании на 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)
 

Комментарии:

1. Добавить полный журнал ошибок

2. Опубликован журнал ошибок, сэр. 🙂 @vrundpurohit Спасибо .

3. я не вижу Log.d("Downlaoder",s.toString()); в вашем downloader.java где угодно

4. Упс, я удалил его, потому что он генерирует ошибку. Но я изменил его, изменив его Log.d("Downlaoder",""=s); , и Android monitor говорит s null , что это так.

Ответ №1:

В вашем DataParser.Java классе результат 0 был возвращен независимо.

 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
}
 

Пожалуйста, добавьте журнал, чтобы проверить, что было возвращено, если он возвращает 0, вы должны получить Failed своего рода toast.

Комментарии:

1. Итак, как я могу передать json в драйвер, я думал, что уже поставил его там. … тьфу

2. Я просматривал свой ответ, пожалуйста, проверьте сейчас.