Anonymous
Gson return object Как разобрать?
Сообщение
Anonymous » 25 июл 2025, 00:44
Мой веб -API возвращает объект, а не массив ... < /p>
jsonsyntaxexexception: java.lang.illegalstateexception: ожидаемый begin_array, но был начал />
Код: Выделить всё
private List
product;
public List getProduct() {
return product;
}
< /code>
Это не работает! < /p>
Следующий код работает, но он получает объект, такой как «key = value, key = value, key = value" < /code>
, поэтому я не могу извлечь даты из объекта ... < /p>
public Object getProduct() {
if( product instanceof Map ) {
Map map = (Map)product;
String title = (String)map.get("title");
String image = (String)map.get("featured_src");
Log.e("TESTLOG",title.toString());
}
< /code>
Вот мой продукт ledetailssimple.java < /p>
public class ProductDetailsSimple {
private String id;
private String title;
private String created_at;
public String getId() {
return id;
}
public String getName() {
return title;
}
public String getImage() {
return created_at;
}
}
Также я могу принести объект, но я не могу проанализировать значения объекта по ключам ...
Как это сделать?
Код: Выделить всё
package com.learn2crack.listviewjson;
import android.os.AsyncTask;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.learn2crack.listviewjson.model.ResponseProduct;
import com.learn2crack.listviewjson.model.ProductDetails;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
/**
* Created by Michael on 21.10.2017.
*/
public class LoadJSONTaskProduct extends AsyncTask {
public LoadJSONTaskProduct(com.learn2crack.listviewjson.LoadJSONTaskProduct.Listener listener) {
mListener = listener;
}
public interface Listener {
void onLoaded(Object product);
void onError();
}
private com.learn2crack.listviewjson.LoadJSONTaskProduct.Listener mListener;
@Override
protected ResponseProduct doInBackground(String... strings) {
try {
String stringResponse =loadJSON(strings[0]);
Gson gson = new Gson();
Log.e("TESTLOGTaskProd2",stringResponse);
return gson.fromJson(stringResponse, ResponseProduct.class);
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (JsonSyntaxException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(ResponseProduct response) {
if (response != null) {
mListener.onLoaded(response.getProduct());
} else {
mListener.onError();
}
}
private String loadJSON(String jsonURL) throws IOException {
URL url = new URL(jsonURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Log.e("TESTLOG11",in.toString());
String line;
StringBuilder response = new StringBuilder();
Log.e("TESTLOG22",response.toString());
while ((line = in.readLine()) != null) {
response.append(line);
}
in.close();
Log.e("TESTLOG23",response.toString());
return response.toString();
}
}
< /code>
my loadjsontaskproduct.java < /p>
package com.learn2crack.listviewjson;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.learn2crack.listviewjson.model.ProductDetails;
import org.json.JSONArray;
import org.json.JSONObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class ShowProductDetails extends AppCompatActivity implements LoadJSONTaskProduct.Listener, AdapterView.OnItemClickListener{
private ListView mListView;
Object product;
//http://copy-cat.at/api/index.php?act=getProduct&product_id=
//public static final String URL = "http://copy-cat.at/api/index.php?act=getProduct&product_id=118";
private List mProductMapList = new ArrayList();
private static final String KEY_VER = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_API = "permalink";
private static final String KEY_SRC = "src";
private static final String KEY_REGPRICE = "regular_price";
private static final String KEY_PRICE = "price";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_product_details);
String productid = getIntent().getStringExtra("productid");
mListView = (ListView) findViewById(R.id.list_view);
Log.e("TESTLOGPRODUCT", productid);
//http://copy-cat.at/api/index.php?act=getProduct&product_id=
String URLRequest = "http://copy-cat.at/api/index.php?act=getProduct&product_id="+productid;
new LoadJSONTaskProduct(this).execute(URLRequest);
}
@Override
public void onLoaded(Object product ) {
//Log.e("TESTLOGPRODUCT2", product.toString());
HashMap map = new HashMap();
String splittString = product.toString();
String[] split = splittString.split(",",-1);
Log.e("TESTLOGPRODUCT2", split.toString());
/** JSONArray json;
Object myjson = new JSONObject(product);
JSONArray the_json_array = myjson.getJSONArray("profiles");
json = product;
List list = new ArrayList();
JSONArray array = json.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
list.add(array.getJSONObject(i).getString("interestKey"));
}
map.put(KEY_VER, product.toString());
// map.put(KEY_TITLE, product.getTitle());
mProductMapList.add(map);
**/
loadListView();
}
@Override
public void onError() {
Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView adapterView, View view, int i, long l) {
Toast.makeText(this, mProductMapList.get(i).get(KEY_TITLE),Toast.LENGTH_LONG).show();
//ShowProduct.getProduct(this);
}
private void loadListView() {
ListAdapter adapter = new SimpleAdapter(ShowProductDetails.this, mProductMapList, R.layout.content_show_product_details,
new String[] { KEY_VER},
new int[] { R.id.id});
mListView.setAdapter(adapter);
}
}
my showproductdetails.class (основной файл - активность)
Подробнее здесь:
https://stackoverflow.com/questions/471 ... w-to-parse
1753393476
Anonymous
Мой веб -API возвращает объект, а не массив ... < /p> jsonsyntaxexexception: java.lang.illegalstateexception: ожидаемый begin_array, но был начал />[code]private List product; public List getProduct() { return product; } < /code> Это не работает! < /p> Следующий код работает, но он получает объект, такой как «key = value, key = value, key = value" < /code> , поэтому я не могу извлечь даты из объекта ... < /p> public Object getProduct() { if( product instanceof Map ) { Map map = (Map)product; String title = (String)map.get("title"); String image = (String)map.get("featured_src"); Log.e("TESTLOG",title.toString()); } < /code> Вот мой продукт ledetailssimple.java < /p> public class ProductDetailsSimple { private String id; private String title; private String created_at; public String getId() { return id; } public String getName() { return title; } public String getImage() { return created_at; } [/code] } Также я могу принести объект, но я не могу проанализировать значения объекта по ключам ... Как это сделать?[code]package com.learn2crack.listviewjson; import android.os.AsyncTask; import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.learn2crack.listviewjson.model.ResponseProduct; import com.learn2crack.listviewjson.model.ProductDetails; import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; /** * Created by Michael on 21.10.2017. */ public class LoadJSONTaskProduct extends AsyncTask { public LoadJSONTaskProduct(com.learn2crack.listviewjson.LoadJSONTaskProduct.Listener listener) { mListener = listener; } public interface Listener { void onLoaded(Object product); void onError(); } private com.learn2crack.listviewjson.LoadJSONTaskProduct.Listener mListener; @Override protected ResponseProduct doInBackground(String... strings) { try { String stringResponse =loadJSON(strings[0]); Gson gson = new Gson(); Log.e("TESTLOGTaskProd2",stringResponse); return gson.fromJson(stringResponse, ResponseProduct.class); } catch (IOException e) { e.printStackTrace(); return null; } catch (JsonSyntaxException e) { e.printStackTrace(); return null; } } @Override protected void onPostExecute(ResponseProduct response) { if (response != null) { mListener.onLoaded(response.getProduct()); } else { mListener.onError(); } } private String loadJSON(String jsonURL) throws IOException { URL url = new URL(jsonURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); Log.e("TESTLOG11",in.toString()); String line; StringBuilder response = new StringBuilder(); Log.e("TESTLOG22",response.toString()); while ((line = in.readLine()) != null) { response.append(line); } in.close(); Log.e("TESTLOG23",response.toString()); return response.toString(); } } < /code> my loadjsontaskproduct.java < /p> package com.learn2crack.listviewjson; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import com.learn2crack.listviewjson.model.ProductDetails; import org.json.JSONArray; import org.json.JSONObject; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; public class ShowProductDetails extends AppCompatActivity implements LoadJSONTaskProduct.Listener, AdapterView.OnItemClickListener{ private ListView mListView; Object product; //http://copy-cat.at/api/index.php?act=getProduct&product_id= //public static final String URL = "http://copy-cat.at/api/index.php?act=getProduct&product_id=118"; private List mProductMapList = new ArrayList(); private static final String KEY_VER = "id"; private static final String KEY_TITLE = "title"; private static final String KEY_API = "permalink"; private static final String KEY_SRC = "src"; private static final String KEY_REGPRICE = "regular_price"; private static final String KEY_PRICE = "price"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_product_details); String productid = getIntent().getStringExtra("productid"); mListView = (ListView) findViewById(R.id.list_view); Log.e("TESTLOGPRODUCT", productid); //http://copy-cat.at/api/index.php?act=getProduct&product_id= String URLRequest = "http://copy-cat.at/api/index.php?act=getProduct&product_id="+productid; new LoadJSONTaskProduct(this).execute(URLRequest); } @Override public void onLoaded(Object product ) { //Log.e("TESTLOGPRODUCT2", product.toString()); HashMap map = new HashMap(); String splittString = product.toString(); String[] split = splittString.split(",",-1); Log.e("TESTLOGPRODUCT2", split.toString()); /** JSONArray json; Object myjson = new JSONObject(product); JSONArray the_json_array = myjson.getJSONArray("profiles"); json = product; List list = new ArrayList(); JSONArray array = json.getJSONArray("interests"); for(int i = 0 ; i < array.length() ; i++){ list.add(array.getJSONObject(i).getString("interestKey")); } map.put(KEY_VER, product.toString()); // map.put(KEY_TITLE, product.getTitle()); mProductMapList.add(map); **/ loadListView(); } @Override public void onError() { Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show(); } @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { Toast.makeText(this, mProductMapList.get(i).get(KEY_TITLE),Toast.LENGTH_LONG).show(); //ShowProduct.getProduct(this); } private void loadListView() { ListAdapter adapter = new SimpleAdapter(ShowProductDetails.this, mProductMapList, R.layout.content_show_product_details, new String[] { KEY_VER}, new int[] { R.id.id}); mListView.setAdapter(adapter); } } [/code] my showproductdetails.class (основной файл - активность) Подробнее здесь: [url]https://stackoverflow.com/questions/47187780/gson-return-object-how-to-parse[/url]