How to get String[] outside OnCreate() - java

Here I'm using the following code to create a string current[] using for loop:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageactivity);
Intent intent = getIntent();
String jsonArray = intent.getStringExtra("jsonArray");
try {
JSONArray array = new JSONArray(jsonArray);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
String current_name[] = { obj.getString("current_name") }; // array
}
} catch (JSONException e) {
e.printStackTrace();
}
}
// Log.e(TAG,"VALUES" + Arrays.toString(current_name));
Now I want to call this current_name[] outside OnCreate or some other method. By using this code I can't Log outside OnCreate. So please help me to solve this issue. Answers will be appreciated.

Declare the array as a member of the activity and in the onCreate initialize it only
try {
JSONArray array = new JSONArray(jsonArray);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
current_name[i] = obj.getString("current_name");
}
} catch (JSONException e) {
e.printStackTrace();
}

try this one.
String current_name[] = {};
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageactivity);
Intent intent = getIntent();
String jsonArray = intent.getStringExtra("jsonArray");
try {
JSONArray array = new JSONArray(jsonArray);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
current_name[i] =obj.getString("current_name"); // array
}
} catch (JSONException e) {
e.printStackTrace();
}
}
Now you can access String out of oncreate.

Related

How to receive a data from a JSONObject to a simple array

I am trying to get a int that is inside a JSONObject and put it in a String Array, but i only can put it in a simple String.
This is what inside the JSONObject {"codigo":2,"nome":"Teste 2"}
That is the code that i can pass the int from codigo to a simple String
String informacao;
String code;
String name[];
ListView listView;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
informacao = intent.getStringExtra("INFO");
try{
JSONObject jo = new JSONObject(informacao);
for (int i = 0; i < jo.length(); i++){
Log.i("ENTROU", "entrou");
code = jo.getString("codigo").toString();
Log.i("CODE!!!", code.toString());
}
} catch (JSONException e){
Log.i("ERRO", e.toString());
}
Logcat from it
2020-03-20 09:48:48.046 23998-23998/br.com.ifractal.Stou I/ENTROU: entrou
2020-03-20 09:48:48.046 23998-23998/br.com.ifractal.Stou I/CODE!!!: 2
2020-03-20 09:48:48.046 23998-23998/br.com.ifractal.Stou I/ENTROU: entrou
2020-03-20 09:48:48.046 23998-23998/br.com.ifractal.Stou I/CODE!!!: 2
Now when i try to put it in a String Array
String informacao;
String code[];
String name[];
ListView listView;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
informacao = intent.getStringExtra("INFO");
try{
JSONObject jo = new JSONObject(informacao);
for (int i = 0; i < jo.length(); i++){
Log.i("ENTROU", "entrou");
code[i] = jo.getString("codigo").toString();
Log.i("CODE!!!", code[i].toString());
}
} catch (JSONException e){
Log.i("ERRO", e.toString());
}
Logcat from that
2020-03-20 09:56:25.195 25695-25695/br.com.ifractal.Stou I/ENTROU: entrou
You are not setting the length of the array. It doesn't dynamically increase like in JavaScript. If you initialize the array like so: String code[] = new String[10]; you should be able to set its elements.

How to save this JSON Object to Array List in Android

I'm having troubles finding a way how to parse this JSONObject on Java:
{"market_cap":[[1518987267000,183700781183],
[1518987567000,183687424480],
[1518987868000,183687424480],
.
.
.
[1519080954726,7730730000]]}
This is the full json: JSON
I´m looking for save these data on a List Array...
I have updated my full function:
static String urlJsonArry2 = "http://coincap.io/history/1day/BTC";
private JSONObject responseJsonObject;
private void GettingDataGraph(){
progressDialog.setMessage("Getting Data");
progressDialog.show();
JsonArrayRequest req = new JsonArrayRequest(urlJsonArry2,
new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
try {
ArrayList<Object> MARKET_CAP_ARRAY_LIST = new ArrayList<>();
JSONArray marketCapArray = responseJsonObject.optJSONArray("volume");
for (int i=0; i< marketCapArray.length(); i++){
JSONArray array1 = (JSONArray) marketCapArray.get(i);
for (int j=0; j < array1.length(); j++){
MARKET_CAP_ARRAY_LIST.add(array1.get(j));
}
}
Log.d(TAG, String.valueOf(MARKET_CAP_ARRAY_LIST));
progressDialog.dismiss();
} catch (JSONException e) {
e.printStackTrace();
Log.d(TAG, "ERROR " + e.getMessage());
progressDialog.dismiss();
}
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Log.d(TAG, "ERROR " + error.getMessage());
progressDialog.dismiss();
}
});
AppController.getInstance().addToRequestQueue(req);
}
My updated logcat is this:
D/Volley: [1] 5.onErrorResponse: ListMain
D/ListMain: ERROR org.json.JSONException: Value {"volume":[[1518987267000,9151900000],[1518987567000,9157160000],[1518987868000,9169080000],[1518988166000,9161370000],[1518988467000,9154150000],[1518988765000,9144130000],[1518989067000,9128060000],[1518989366000,9117040000],[1518989665000,9113130000],[1518989965000,9094710000],[1518990267000,9110340000],[1518990567000,9144620000],[1518990868000,9168270000],[1518991167000,9179440000],[1518991467000,9181180000],[1518991767000,9175010000],[1518992067000,9175640000],[1518992366000,9161110000],[1518992667000,9140220000],[1518992966000,9146430000],[1518993266000,9164780000],[1518993567000,9136680000],[1518993866000,9087550000],[1518994167000,9035050000],[1518994466000,8991310000],[1518994766000,8990680000],[1518995067000,8973400000],[1518995367000,8941170000],[1518995667000,8895200000],[1518995966000,8853810000],[1518996267000,8821540000],[1518996566000,8778680000],[1518996867000,8778560000],[1518997167000,8802030000],[1518997467000,8808330000],[1518997767000,8793550000],[1518998068000,8778190000],[1518998367000,8744010000],[1518998667000,8730850000],[1518998967000,8739700000],[1518999266000,8708270000],[1518999566000,8692760000],[1518999867000,8696210000],[1519000167000,8691320000],[1519000467000,8704830000],[1519000768000,8701960000],[1519001067000,8703500000],[1519001366000,8690490000],[1519001666000,8654650000],[1519001966000,8645390000],[1519002266000,8642730000],[1519002567000,8594570000],[1519002867000,8634390000],[1519003166000,8671810000],[1519003466000,8673840000],[1519003769000,8680670000],[1519004068000,8676080000],[1519004369000,8672160000],[1519004666000,8635240000],[1519004969000,8601340000],[1519005266000,8610940000],[1519005567000,8609810000],[1519005869000,8623850000],[1519006173000,8627350000],[1519006467000,8593110000],[1519006765000,8582360000],[1519007066000,8558920000],[1519007367000,8520250000],[1519007666000,8534120000],[1519007969000,8565770000],[1519008268000,8568240000],[1519008568000,8568010000],[1519008867000,8551680000],[1519009168000,8520880000],[1519009467000,8505580000],[1519009769000,8499980000],[1519010069000,8460400000],[1519010368000,8443030000],[1519010667000,8435930000],[1519010969000,8385870000],[1519011267000,8336820000],[1519011567000,8314420000],[1519011866000,8306510000],[1519012167000,8289780000],[1519012467000,8265550000],[1519012767000,8230840000],[1519013067000,8198170000],[1519013368000,8184000000],[1519013668000,8183500000],[1519013967000,8177700000],[1519014268000,8173580000],[1519014567000,8169000000],[1519014868000,8156480000],[1519015166000,8142310000],[1519015466000,8135780000],[1519015767000,8146410000],[1519016067000,8142550000],[1519016368000,8121680000],[1519016668000,8100770000],[1519016967000,8107950000],[1519017268000,8058870000],[1519017566000,7990860000],[1519017867000,7953970000],[1519018169000,7918280000],[1519018467000,7881990000],[1519018768000,7823290000],[1519019067000,7815010000],[1519019366000,7808360000],[1519019667000,7784880000],[1519019968000,7749460000],[1519020267000,7735900000],[1519020566000,7734530000],[1519020865000,7718370000],[1519021166000,7699210000],[1519021467000,7685120000],[1519021767000,7677750000],[1519022067000,7660540000],[1519022365000,7627040000],[1519022666000,7621670000],[1519022966000,7620360000],[1519023267000,7613420000],[1519023568000,7583250000],[1519023867000,7563660000],[1519024167000,7581690000],[1519024467000,7592450000],[1519024767000,7575950000],[1519025068000,7623950000],[1519025368000,7705190000],[1519025666000,7750020000],[1519025967000,7794050000],[1519026267000,7820790000],[1519026567000,7814480000],[1519026868000,7819060000],[1519027167000,7811230000],[1519027467000,7812310000],[1519027766000,7806300000],[1519028069000,7717960000],[1519028367000,7717970000],[1519028666000,7739410000],[1519028967000,7770270000],[1519029267000,7787760000],[1519029567000,7778010000],[1519029867000,7753830000],[1519030166000,7743590000],[1519030467000,7744180000],[1519030767000,7712770000],[1519031066000,7684790000],[1519031367000,7648400000],[1519031667000,7630540
I'm getting a onErrorResponse
In case someone is interested...this code works good for this array:
ArrayList<Object> MARKET_CAP_ARRAY_LIST = new ArrayList<>();
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray jsonArray = jsonObject.getJSONArray("market_cap");
for (int i = 0; i < jsonArray.length(); i++) {
JSONArray array1 = (JSONArray) jsonArray.get(i);
for (int j=0; j < array1.length(); j++){
MARKET_CAP_ARRAY_LIST.add(array1.get(j));
Log.d("ARRAY: ", String.valueOf(MARKET_CAP_ARRAY_LIST));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
Thanks...
You can parse JSON like this.
private void parseJsonObject(JSONObject responseJsonObject) throws JSONException {
ArrayList<Object> MARKET_CAP_ARRAY_LIST = new ArrayList<>();
JSONArray marketCapArray = responseJsonObject.optJSONArray("market_cap");
for (int i=0; i< marketCapArray.length(); i++){
JSONArray array1 = (JSONArray) marketCapArray.get(i);
for (int j=0; j < array1.length(); j++){
MARKET_CAP_ARRAY_LIST.add(array1.get(j));
}
}
}
private class JsonAsyncTask extends AsyncTask<Void, Void, Void> {
String url ;
public JsonAsyncTask(String url) {
this.url = url;
}
#Override
protected Void doInBackground(Void... voids) {
processApiResponse(url);
return null;
}
private void processApiResponse(String url) {
try {
URL jsonUrl = new URL(url);
BufferedReader in = new BufferedReader(new InputStreamReader(jsonUrl.openStream()));
String inputLine;
StringBuilder jsonStringBuilder = new StringBuilder();
while ((inputLine = in.readLine()) != null)
jsonStringBuilder.append(inputLine);
in.close();
String jsonString = jsonStringBuilder.toString();
Volume volume = new Gson().fromJson(jsonString, Volume.class);
System.out.println(volume);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
The POJO classes
private class Volume {
ArrayList<VolumeObject> market_cap;
ArrayList<VolumeObject> volume;
}
private class VolumeObject extends ArrayList<Double> {
}
You can use
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
to add Gson in your project.
And to call the AsyncTask in an activity
#Override
protected void onCreate(#Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dummy);
JsonAsyncTask task = new JsonAsyncTask("http://coincap.io/history/1day/BTC");
task.execute();
}
I hope this helps
Note: For the network operation you can use any other library. Whereas retrofit is preferred by me.

Issue with a for loop over JSON

I seem to be having an issue looping through a JSONObject
The following loop is within a try catch. I am trying to loop through returned JSON, but it skips
try {
JSONObject jsonObject = new JSONObject(result);
// Extract data from json and store into ArrayList as class objects
for(int i = 0; i < jsonObject.length(); i++){
JSONObject jD = jsonObject.getJSONObject(i).;
DataRecipes recipeData = new DataRecipes();
recipeData.image_url = jD.getString("image_url");
recipeData.title = jD.getString("title");
recipeData.publisher = jD.getString("publisher");
data.add(recipeData);
}
} catch (JSONException e) {
Toast.makeText(Main_Food.this, e.toString(), Toast.LENGTH_LONG).show();
}
Response JSON
{"count": 30, "recipes": [{"publisher": "Closet Cooking", "f2f_url": "http://food2fork.com/view/35382", "title": "Jalapeno Popper Grilled Cheese Sandwich", "source_url": "http://www.closetcooking.com/2011/04/jalapeno-popper-grilled-cheese-sandwich.html", "recipe_id": "35382", "image_url": "http://static.food2fork.com/Jalapeno2BPopper2BGrilled2BCheese2BSandwich2B12B500fd186186.jpg", "social_rank": 100.0, "publisher_url": "http://closetcooking.com"}, {"publisher": "The Pioneer Woman",
Code within the onPostExecute.
even with the changes still ignores the inners and moves straight to the catch.
#Override
protected void onPostExecute(String result) {
List<DataRecipes> data = new ArrayList<>();
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArrayRecipe = jsonObject.getJSONArray("recipes");
for(int i = 0; i < jsonArrayRecipe.length(); i++){
JSONObject jD = jsonArrayRecipe.getJSONObject(i);
DataRecipes recipeData = new DataRecipes();
recipeData.image_url = jD.getString("image_url");
recipeData.title = jD.getString("title");
recipeData.publisher = jD.getString("publisher");
data.add(recipeData);
}
} catch (JSONException e) {
Toast.makeText(Main_Food.this, e.toString(), Toast.LENGTH_LONG).show();
}
// Setup and Handover data to recyclerview
mRVRecipePrice = findViewById(R.id.jsonText);
mAdapter = new AdapterRecipe(Main_Food.this, data);
mRVRecipePrice.setAdapter(mAdapter);
mRVRecipePrice.setLayoutManager(new LinearLayoutManager(Main_Food.this));
}
You need to access the recipe array first
Try this
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArrayrecipe = jsonObject .getJSONArray("recipes");
for(int i = 0; i < jsonArrayrecipe .length(); i++){
JSONObject jD = jsonArrayrecipe .getJSONObject(i);
DataRecipes recipeData = new DataRecipes();
recipeData.image_url = jD.getString("image_url");
recipeData.title = jD.getString("title");
recipeData.publisher = jD.getString("publisher");
data.add(recipeData);
}
} catch (JSONException e) {
Toast.makeText(Main_Food.this, e.toString(), Toast.LENGTH_LONG).show();
}

How extract JSONObject from JSONArray in android

I want to read only the "value" object from this jsonarray
"body":{"und":[{"value":"hi friends!!!","summary":null,"format":null}]}
This is my code:
protected void onPostExecute(final JSONObject result) {
try {
TextView lst2 = (TextView) findViewById(R.id.View2);
JSONArray cast = result.getJSONArray("body");
for (int i=0; i<cast.length(); i++) {
JSONObject actor = cast.getJSONObject(i);
String name = actor.getString("value");
lst2.setText(name);
}
} catch (Exception e2) {
Log.v("Error adding article", e2.getMessage());
}
}
JSONObject result is the response from the rest server.
body is not array its object, you need to get und out of body as JSONArray first
protected void onPostExecute(final JSONObject result) {
try {
TextView lst2 = (TextView) findViewById(R.id.View2);
JSONArray cast = result.getJSONObject("body").getJSONArray("und");
for (int i=0; i<cast.length(); i++) {
JSONObject actor = cast.getJSONObject(i);
String name = actor.getString("value");
lst2.setText(name);
}
} catch (Exception e2) {
Log.v("Error adding article", e2.getMessage());
}
}
Hope it helps

Json to hashMap listview

I'm new to android development. Can you please help me to put my code to the hashmap-listview? Here I am loading bank images to the ListView. in my new JSON there is a key and value. ie (BankName , logo)
public void ListDrwaer() {
List<String> listImg = new ArrayList<String>();
try {
JSONObject jsonResponse = new JSONObject(strJson1);
JSONArray jsonMainNode = jsonResponse.optJSONArray("bank");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
img_url = jsonChildNode.optString("logo");
String test1 = img_test_url + img_url;
listImg.add(test1);
Log.d("URL", test1);
}
ItemsAdapter adapter = new ItemsAdapter(getActivity(), listImg);
menu.setAdapter(adapter);
} catch (JSONException e) {
Toast.makeText(getActivity(), "Connection Error...",
Toast.LENGTH_LONG).show();
}
}
You can use Pairs instead of HashMap
Try this
public void ListDrwaer() {
ArrayList<Pair<String,String>> listData = new ArrayList<Pair<String,String>>();
try {
JSONObject jsonResponse = new JSONObject(strJson1);
JSONArray jsonMainNode = jsonResponse.optJSONArray("bank");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
img_url = jsonChildNode.optString("logo");
String test1 = img_test_url + img_url;
String BankName = jsonChildNode.optString("id");
listData.add(new Pair<String,String>(BankName,test1 ));
}
ItemsAdapter adapter = new ItemsAdapter(getApplicationContext(),listData);
list.setAdapter(adapter);
} catch (JSONException e) {
Toast.makeText(getActivity(), "Connection Error...",
Toast.LENGTH_LONG).show();
}
}

Categories