2016-12-21 10 views
-6

私はAndroidには初めてです。私は多くの質問、ページ、ウェブサイトを検索していました。 私は以下のようにRestAPIを解析しようとしていますが、私は下のAPIに正確な値ではなく、サーバーから戻ってくる値だけを得ています。 このapiから正確な価値を得る方法を誰かに助けてください。RestAPI JSON Parsing

{ 
    "name": "JSONWebAPI", 
    "description": "JSON API for android appliation", 
    "url": "http://SG2NWVPWEB022/Services/LoginHandler.ashx", 
    "interfaces": [ 
    { 
     "name": "RestAPI", 
     "methods": [ 
     { 
      "name": "getProject", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getNews", 
      "parameters": [ 

      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getAllDownloads", 
      "parameters": [ 

      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getvideo", 
      "parameters": [ 

      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getLocation", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getProjecttype", 
      "parameters": [ 

      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getArea", 
      "parameters": [ 

      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "addHr", 
      "parameters": [ 
      { 
       "name": "name", 
       "type": "string" 
      }, 
      { 
       "name": "phone", 
       "type": "string" 
      }, 
      { 
       "name": "address", 
       "type": "string" 
      }, 
      { 
       "name": "mailid", 
       "type": "string" 
      }, 
      { 
       "name": "applyfor", 
       "type": "string" 
      }, 
      { 
       "name": "resumetext", 
       "type": "string" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "findprojects", 
      "parameters": [ 
      { 
       "name": "area", 
       "type": "int32" 
      }, 
      { 
       "name": "type", 
       "type": "int32" 
      }, 
      { 
       "name": "requirement", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getBrochure", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getGallery", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getWork", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getPlan", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     }, 
     { 
      "name": "getfacility", 
      "parameters": [ 
      { 
       "name": "projectid", 
       "type": "int32" 
      } 
      ], 
      "returnvalue": "object" 
     } 
     ] 
    } 
    ] 
} 
    public class MainActivity extends AppCompatActivity { 
    ImageView im; 
    String str; 
    private String TAG = MainActivity.class.getSimpleName(); 
    private ProgressDialog pDialog; 
    private ListView lv; 
    private static String url = "http://mpanel.leeladevelopers.com/Services/LoginHandler.ashx?jsdl"; 

    ArrayList<String> data1=new ArrayList<>(); 
    ArrayList<String> data2 = new ArrayList<>(); 
    ArrayList<String> data3 = new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     im = (ImageView)findViewById(R.id.img1); 
     lv = (ListView) findViewById(R.id.lst1); 
     new Getdata().execute(); 
    } 

    private class Getdata extends AsyncTask<Void,Void,Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      HttpHadnler ht =new HttpHadnler(); 
      String jsonstr = ht.makeServiceCall(url); 
      Log.e(TAG,"response from url:" +jsonstr); 
      if (jsonstr!=null){ 
       try { 
        JSONObject jsonObj = new JSONObject(jsonstr); 
        // Getting JSON Array node 
        JSONArray data = jsonObj.getJSONArray("interfaces"); 
        Log.println(Log.ASSERT,"data",data.toString()); 
        for(int i=0;i<data.length();i++){ 
         JSONObject c = data.getJSONObject(i); 
         JSONArray dat1 = c.getJSONArray("methods"); 
         Log.println(Log.ASSERT,"method",dat1.toString()); 
         for(int j=0;j<dat1.length();j++){ 
          JSONObject c1 = dat1.getJSONObject(j); 
          String packname = String.valueOf(c1.get("name")); 
          JSONArray dat2 = c1.getJSONArray("parameters"); 
         //  String method = String.valueOf(c1.get("name")); 
          for(int k=0;k<dat2.length();k++){ 
           JSONObject c3 = dat2.getJSONObject(k); 
           String paraname = String.valueOf(c3.get("name")); 
           String paratype = String.valueOf(c3.get("type")); 
           //String returnval = String.valueOf(c3.get("returnvalue")); 
           data1.add(paraname); 
           data3.add(paratype); 

          } 
          data2.add(packname); 
         } 
        // String img1= String.valueOf(c.get("cat_image")); 
        } 
       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG) 
            .show(); 
         } 
        }); 
       } 

      }else { 
       Log.e(TAG, "Couldn't get json from server."); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      Customelistadapter adapter = new Customelistadapter(MainActivity.this,data1,data3,data2); 
      // Customelistadapter adapter = new Customelistadapter(MainActivity.this,data1); 
      lv.setAdapter(adapter); 
      // Log.println(Log.ASSERT,"url","https://play.google.com/store/apps/details?id="+str+"second"); 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
     } 

    } 
} 

newwの挿入データ:

public class Add_cont extends AppCompatActivity { 
    Button save; 
    EditText name,num; 
    SQLiteDatabase sd; 
    String dbname = "contact"; 
    String create = "create table if not exists contactmaster(id integer primary key AUTOINCREMENT,name varchar(50),mob number(10))"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_cont); 
     name=(EditText)findViewById(R.id.Edname); 
     num=(EditText)findViewById(R.id.Ednumber); 
     save=(Button)findViewById(R.id.btnsave); 
     sd = openOrCreateDatabase(dbname, MODE_PRIVATE, null); 
     sd.execSQL(create); 

     save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       sd.execSQL("insert into contactmaster (name,mob) values('" + name.getText().toString() + "','" + num.getText().toString() + "')"); 
       sd.close(); 
       Intent intent=new Intent(Add_cont.this,MainActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

アダプタクラス:

public class Contatadapter extends ArrayAdapter<String> { 
    Context context; 
    private ArrayList<String> listData1 =new ArrayList<>(); 
    private ArrayList<String>listData2=new ArrayList<>(); 

    public Contatadapter(Context context,ArrayList<String> listData1,ArrayList<String> listData2) { 
     super(context, R.layout.list_data, listData1); 
     this.context = context; 
     this.listData1 = listData1; 
     this.listData2 = listData2; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     ViewHolder holder; 
     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(context); 
      v = vi.inflate(R.layout.list_data, null); 
      holder = new ViewHolder(); 
      holder.variantView = (TextView) v.findViewById(R.id.txtTitle); 
      holder.unitView = (TextView) v.findViewById(R.id.txtnumber); 
      v.setTag(holder); 
     } else { 
      holder = (ViewHolder) v.getTag(); 
     } 
     holder.variantView.setText(listData1.get(position)); 
     holder.unitView.setText(listData2.get(position)); 
     return v; 
    } 
    static class ViewHolder { 
     TextView variantView; 
     TextView unitView; 
    } 
} 

メインデータ:

public class MainActivity extends AppCompatActivity { 
    Button save,del; 
    ListView list; 
    int pos; 
    String dbname="contact"; 
    SQLiteDatabase sd; 
    Contatadapter imageAdapter; 
    ArrayList<String> name= new ArrayList<String>(); 
    ArrayList<String> number = new ArrayList<String>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     save=(Button)findViewById(R.id.btnadd); 
     del=(Button)findViewById(R.id.btndel); 
     list=(ListView)findViewById(R.id.lst1); 

     sd=openOrCreateDatabase(dbname,MODE_PRIVATE, null); 
     String selectQuery = "SELECT * FROM contactmaster ORDER BY name"; 
     Cursor cursor = sd.rawQuery(selectQuery,null); 
        if(cursor.getCount()>0){ 
       if (cursor.moveToFirst()) { 
        do { 
         name.add(cursor.getString(1)); 
         number.add(cursor.getString(2)); 
         Log.println(Log.ASSERT,"url","hendnllkccnkklnlkncld"+cursor.getString(1)+"name"); 
        } while (cursor.moveToNext()); 
       } 
      } 
     Log.println(Log.ASSERT,"url","hendnllkccnkklnlkncld"+cursor.getCount()+"count"); 

      sd.close(); 

     imageAdapter =new Contatadapter(this,name,number); 
     list.setAdapter(imageAdapter); 
     imageAdapter.notifyDataSetChanged(); 

     save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent=new Intent(MainActivity.this,Add_cont.class); 
       startActivity(intent); 
      } 
     }); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       String val =((TextView) view.findViewById(R.id.txtTitle)).getText().toString(); 
       String val1 =((TextView) view.findViewById(R.id.txtnumber)).getText().toString(); 
       Intent intent=new Intent(MainActivity.this,Update.class); 
       intent.putExtra("name",val); 
       intent.putExtra("number",val1); 
       startActivity(intent); 
      } 
     }); 
     del.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      Intent intent=new Intent(MainActivity.this,delte.class); 
      startActivity(intent); 
      } 
     }); 
    } 
} 

JSON HTTPハンドラデータ:

public class HttpHandler { 

    static String response = null; 
    public static final int GET = 1; 
    public static final int POST = 2; 
    HttpURLConnection connection = null; 
    BufferedReader reader = null; 
    URL url = null; 

    public HttpHandler(){ 

    } 

    public String makeGetServiceCall(String reqUrl, int method) { 

     if (method == GET) { 

      try { 
       url = new URL(reqUrl); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.setReadTimeout(10000); 
       connection.setConnectTimeout(50000); 
       connection.setRequestMethod("GET"); 
       connection.connect(); 

       int status = connection.getResponseCode(); 

       if (status == 200) { 

        reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
        StringBuilder builder = new StringBuilder(); 
        String line = ""; 

        while ((line = reader.readLine()) != null) { 

         builder.append(line); 
        } 

        response = builder.toString(); 

       } 


      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return response; 

    } 



    public String makePostServiceCall(String reqUrl, Uri.Builder params, int method) { 

     if (method == POST) { 

      try { 
       url = new URL(reqUrl); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.setReadTimeout(10000); 
       connection.setConnectTimeout(50000); 
       connection.setRequestMethod("POST"); 
       connection.setDoInput(true); 
       connection.setDoOutput(true); 

       String query = params.build().getEncodedQuery(); 
       BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 
       writer.write(query); 
       writer.flush(); 
       writer.close(); 

       connection.connect(); 

       int status = connection.getResponseCode(); 

       if (status == 200) { 

        reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
        StringBuilder builder = new StringBuilder(); 
        String line = ""; 

        while ((line = reader.readLine()) != null) { 

         builder.append(line); 
        } 

        response = builder.toString(); 

       } 


      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return response; 

    } 
} 

アダプタJSON:

public class Main2Activity extends AppCompatActivity { 
public Toolbar toolbar; 
GridView gridView; 
String mainid; 
MyAdapter mAdapter; 
RecyclerView recyclerView; 
ArrayList<getdataoflist> eventlistsubcat; 
String response; 
private GridLayoutManager lLayout; 
ProgressDialog pDialog; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setTitle("Kushal Fab"); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 
    lLayout = new GridLayoutManager(getApplicationContext(), 2); 
    recyclerView = (RecyclerView) findViewById(R.id.recyclerMen1); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(lLayout); 
    SharedPreferences sharedPref1 = getApplicationContext().getSharedPreferences("alldetais", Context.MODE_PRIVATE); 
    mainid=sharedPref1.getString("cat_id", "0"); 
    /* gridView = (GridView)findViewById(R.id.gridview);*/ 



    ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext() 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     new AsyncVideo().execute(); 
    } else { 
     // Ask user to connect to Internet 
     Intent err = new Intent(getApplicationContext(), Interneterror.class); 
     startActivity(err); 
    } 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
     if (matches != null && matches.size() > 0) { 
      String searchWrd = matches.get(0); 
     } 
     return; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onBackPressed() { 

    finish(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    /* getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem item = menu.findItem(R.id.action_search)*/; 
    return true; 
} 

    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    this.finish(); 
    return true; 
} 




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


    @Override 
    protected void onPreExecute() { 
     pDialog = new ProgressDialog(Main2Activity.this); 
     pDialog.setMessage("Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     Uri.Builder builder = new Uri.Builder() 
       .appendQueryParameter("cat_id", mainid); 

     HttpHandler parser = new HttpHandler(); 
     response = parser.makePostServiceCall(StaticDataUtility.Server_URL + "" + StaticDataUtility.get_subcategory_bycategory, builder, parser.POST); 


     JSONObject root = null; 

     if (response != null) { 
      eventlistsubcat = new ArrayList<getdataoflist>(); 
      try { 
       root = new JSONObject(response); 
       if (root.has("categories")) { 
        JSONArray jsonArray = root.getJSONArray("categories"); 
        for (int i = 0; i < jsonArray.length(); i++) { 

         JSONObject c = jsonArray.getJSONObject(i); 
         eventlistsubcat.add(new getdataoflist(c.getString("cat_id"), c.getString("cat_name"), c.getString("parent_cat"), c.getString("image"), c.getString("status"))); 

        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     return response; 
    } 


    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     mAdapter = new MyAdapter(getApplicationContext(),eventlistsubcat,"false"); 
     recyclerView.setAdapter(mAdapter); 

pDialog.dismiss()。ここで

} 
} 

}

+0

お使いのサーバが返すデータ型ではない値を追加します。 – Rahul

+0

どのように私は価値を得ることができますか? –

+0

Androidのタグ付けではなく、サーバーサイドコードを書き込んだ技術にタグを付けます。 – Rahul

答えて

0

あなたはサーバーからデータを取得するためにバレーボールライブラリを使用する必要があり、このためのソリューションは、です。

あなたはMainActivity

のonCreatに
getJsonData(); 

をこの行を追加する必要があり、このメソッドを実行するには、メインの活動に

public void getJsonData() { 

    String tag = "get_json"; 

    StringRequest request = new StringRequest(Request.Method.POST, 
      "YOUR URL TO GET JSON DATA", new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "Get response : " + response); 
      try { 
       JSONObject object = new JSONObject(response); 
       String name = object.getString("name"); 
       String description = object.getString("description"); 
       String url = object.getString("url"); 
       JSONArray array = object.getJSONArray("interfaces"); 
       for (int i = 0;i<array.length();i++){ 
        JSONObject jsonObject = array.getJSONObject(i); 
        String name_2 = jsonObject.getString("name"); 
        JSONArray methodArray = jsonObject.getJSONArray("methods"); 
        for (int k=0;k<methodArray.length();k++){ 
         JSONObject object_1 = methodArray.getJSONObject(k); 
         String name_3= object_1.getString("name"); 
         String returnvalue = object_1.getString("returnvalue"); 
         JSONArray parametersArray = object_1.getJSONArray("parameters"); 
         for (int j=0;j<parametersArray.length();j++){ 
          JSONObject jsonObject_1 = parametersArray.getJSONObject(j); 
          String name_4 = jsonObject_1.getString("name"); 
          String type = jsonObject_1.getString("type"); 
         } 
        } 
       } 
     Customelistadapter adapter = new Customelistadapter(MainActivity.this,data1,data3,data2); 
     lv.setAdapter(adapter); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 

     } 
    }); 
    request.setRetryPolicy(new RetryPolicy() { 

     @Override 
     public void retry(VolleyError error) throws VolleyError { 
     } 

     @Override 
     public int getCurrentTimeout() { 
      return 0; 
     } 

     @Override 
     public int getCurrentRetryCount() { 
      return 0; 
     } 
    }); 
    request.setShouldCache(false); 
    AppController.getInstance().addToRequestQueue(request, tag); 
} 

を、このコードを使用しbuild.gradle(Module:app)

dependencies {.... 
compile 'com.mcxiaoke.volley:library:1.0.19' 
} 

をこの行を追加します。アプリケーションクラスの作成

Applicationタグの内部mainfest.xmlで
public class AppController extends Application { 
    public static final String TAG = AppController.class.getSimpleName(); 

private RequestQueue mRequestQueue; 
private static AppController mInstance; 

@Override 
    public void onCreate() { 
    super.onCreate(); 
    mInstance = this; 
} 

public static synchronized AppController getInstance() { 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     mRequestQueue = Volley.newRequestQueue(getApplicationContext()); 
    } 

    return mRequestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req, String tag) { 
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); 
    getRequestQueue().add(req); 
    } 
    } 

今、編集はこの

<application 
    android:name=".AppController"> 

助けて幸せ...

+0

赤い下線を付けて**新しいresponse.errorlistner **そして最終行** appController ..... ** –

+0

@Hasmukhkachhatiya - 更新された答えを確認してください。 – Shane

+0

** Downloader.Response.ErrorListener()**およびAppcontroller **。getinstance()**。addtorequestqueue ... –