私は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()。ここで
}
}
}
お使いのサーバが返すデータ型ではない値を追加します。 – Rahul
どのように私は価値を得ることができますか? –
Androidのタグ付けではなく、サーバーサイドコードを書き込んだ技術にタグを付けます。 – Rahul