2016-10-05 8 views
0

私はJSON応答を解析するためのJSONParseクラスを作成しました。私は3つのWebサービスを呼び出す必要があります。しかし、私はすべての3つのWebサービスのJSONレスポンスを解析するために、そのSINGLEクラスだけを使いたいと思っています。 3つのWebサービスはすべて、異なるキーと値を持っています。私が行っていることは、以下のようなものです。..Android - 異なるWebサービス用の同じJSON解析クラス

MainActivity.java

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { 

    // Anything Else Goes Here 
    private ArrayList<ModelCourse> ArrayListModelCourses; 

    // Variables 
    private String url = "stream.php"; 
    private String career_path = ""; 

    // Widgets 
    private ListView lv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     init(); 
    } 

    private void init() { 
     initialisation(); 
     find_view_by_id(); 
     clickListners(); 
     fetchData(); 
    } 

    private void initialisation() { 
     ArrayListModelCourses = new ArrayList<>(); 
    } 

    private void find_view_by_id() { 
     lv = (ListView) findViewById(R.id.list_view); 
    } 

    private void clickListners() { 
     lv.setOnItemClickListener(this); 
    } 

    private void fetchData() { 
     StringRequest stringReq = new StringRequest(Request.Method.POST, Constants.base_url + url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        JSONObject jo = new JSONObject(response); 
        if (jo.has("success")) { 
         JsonParse jsonParse = new JsonParse(response); 
         ArrayListModelCourses = jsonParse.parseJson(); 
        } else { 
         Toast.makeText(MainActivity.this, "Error msg from server!!", Toast.LENGTH_LONG).show(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       CustomAdapter ca = new CustomAdapter(getApplicationContext(), ArrayListModelCourses); 
       lv.setAdapter(ca); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(MainActivity.this, "Error:" + error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("user_id", "51"); 
       return params; 
      } 
     }; 
     RequestQueue queue = Volley.newRequestQueue(this); 
     queue.add(stringReq); 
    } 


    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
     String stream_name = ArrayListModelCourses.get(position).getmCourse_name(); 
     String stream_id = ArrayListModelCourses.get(position).getmCourse_id(); 

     career_path += stream_name + ", "; 
     fetchData(); 
    } 
} 

JsonParse.java - 私は3つのWebサービスに使用する単一のクラス。

public class JsonParse { 

    // Anything Else Goes Here 
    ArrayList<ModelCourse> modelCourses = new ArrayList<>(); 

    // Variables 
    public static final String KEY_ARRAY = "stream_name"; 
    public static final String KEY_ID = "stream_id"; 
    public static final String KEY_NAME = "stream_name"; 

    private String mJsonRes; 

    public JsonParse(String jsonRes) { 
     this.mJsonRes = jsonRes; 
    } 

    public ArrayList<ModelCourse> parseJson() throws JSONException { 

     JSONObject jo = new JSONObject(mJsonRes); 
     JSONArray ja = jo.getJSONArray(KEY_ARRAY); 

     for (int i = 0; i < ja.length(); i++) { 
      ModelCourse modelCourseObj = new ModelCourse(); 
      JSONObject object = ja.getJSONObject(i); 
      modelCourseObj.mCourse_id = object.getString(KEY_ID); 
      modelCourseObj.mCourse_name = object.getString(KEY_NAME); 
      modelCourses.add(modelCourseObj); 
     } 
     return modelCourses; 
    } 
} 

ありがとうございます。

+1

何が問題になりましたか?エラーはありますか? –

+1

は動作しているかどうかlogcat please –

+0

これは単一のWebサービスのために働いています。しかし、私は1つのクラスで3つの異なるWebサービスを使用するためのLOGICを見つけることができません@DäñishShärmà @ibtehaz –

答えて

0

jsonデータをオブジェクトにマッピングするためにGsonを使用できます。

jsonデータのモデルクラスを作成します。 (リンクhttp://www.jsonschema2pojo.org/を使用)

MainActivity onResponse()メソッドでは、文字列レスポンスをJsonParseクラスに渡します。

JsonParseクラスであなたのWebサービスの呼び出しに基づいて「JsonModelRootClassName」を取得するための一つの方法を作成することができ、あなたのJSONデータ

Gson gson = new Gson(); 
    gson.fromJson(jsonString, JsonModelRootClassName.class); 

を解析します。

+0

Gsonの例を持つリンクをいくつか与えることができますか? @sanjeet kumar Singh –

+0

は、https://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.htmlを参照してください。 – Sanjeet

関連する問題