2016-10-15 38 views
0

こんにちは、私はいつも私のウェブホストからJSONを取得していますこのエラーが表示されますNullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null objectJSONをスピナーに読み込むことができません

ここに私のコードです。 JSON

<?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); 

?> 

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; 
} 
} 
を取得する

PHP 210

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","")+"&roles=driver&driverStatus=active"; 

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

申し訳ありませんが、長いポストですが助けてください。 :C thaaaaanks :)

EDIT Log.d("Downlaoder",s.toString());がDownloader.java上でテストされて

エラー。あなたのDataParser.Javaクラスの結果0で

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) 
+0

フルエラーログを追加 –

+0

エラーログが送信されました。 :) @vrundpurohitありがとう。 –

+0

あなたのdownloader.javaどこでも 'Log.d(" Downlaoder "、s.toString());'を参照できます –

答えて

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 
} 

それはあなたが乾杯のFailedの並べ替えを取得する必要があります0を返している場合、返されたかどうか確認するためにログを追加してください。

+0

それでは、どうやってドライバーにjsonを手に入れたらいいですか? ... ughhh –

+0

申し訳ありませんが間違っていた、更新された答えを確認してください。 – Shivansh

+0

回答はどこで更新されましたか? –

関連する問題