2016-07-15 6 views
0

book_nameの別のbook_nameのjsonデータを取得しています& bookが存在しない場合に備えて、私のアプリケーションは崩壊します。本が見つからないときに崩壊するのではなく、何かをして欲しい。私のコードは次のとおりです。 `urlが存在するかどうかをチェックしてjsonデータを取得する方法

public class AsyncTaskParseJson extends AsyncTask<String, String, String> { 

    final String TAG = "AsyncTaskParseJson.java"; 

    // set your json string url here 
    Intent po=getIntent(); 
    String bok=po.getStringExtra("bookname"); 
    String newName = bok.replaceAll("\\s", "%20"); 
    String yourJsonStringUrl = "http://www.bsservicess.com/photoUpload/star_avg.php?bookName="+newName; 

    // contacts JSONArray 
    JSONArray dataJsonArr = null; 
    @Override 
    protected void onPreExecute() {} 


    protected String doInBackground(String... arg0) { 
     if(exists(yourJsonStringUrl)) { 
     try { 
      JSONParser jParser = new JSONParser(); 

      // get json string from url 

      JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl); 



       // get the array of users 
       dataJsonArr = json.getJSONArray("result"); 
       JSONObject c = dataJsonArr.getJSONObject(0); 
       // na=c.getString("avg"); 

       ratenumS = c.getString("avg"); 
       numberS = c.getString("num"); 
       starts = Float.parseFloat(c.getString("avg")); 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     }else{ 
      starts=0; 
      numberS="0"; 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String strFromDoInBg) { 
     super.onPostExecute(strFromDoInBg); 
     ratenum.setText(ratenumS); 
     number.setText("("+numberS+")"); 
     netRate.setRating(starts); 
    // Toast.makeText(mybookview.this, Float.toString(starts),Toast.LENGTH_SHORT).show(); 
    } 

Plzは私を助けて。 `

 public JSONObject getJSONFromUrl(String url) { 

    // make HTTP request 
    try { 

     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

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

    try { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 

    } catch (Exception e) { 
     Log.e(TAG, "Error converting result " + e.toString()); 
    } 

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

    // return JSON String 
    return jObj; 
} 

}`

+0

あなたは 'JSONParser'クラスを投稿できますか? – Bill

+0

okk私はmtyに投稿する質問 –

答えて

1
// get json string from url 

JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl); 
if(json == null){ 
    //url parsing didn't work 
    return; 
} 
+0

私の問題を解決するために大きなthanxx。 –

0

あなたは、例外を処理し、あなたのアプリがクラッシュするトライキャッチを追加する必要があります。

+0

私はそれがクラッシュしている場所を知っています原因:java.lang.NullPointerException:仮想メソッド 'org.json.JSONArrayを呼び出そうとしました。org.json.JSONObject.getJSONArray(java.lang.String)' nullのオブジェクト参照の場合 at dataJsonArr = json.getJSONArray( "result");しかし、それを修正する方法はわかりません –

+0

JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl); ?はいの場合は、配列を取得しようとする前にnullチェックが必要 – KgaboL

関連する問題