0

I am trying to get JSON data to app, but getting JSON Exception

MainActivity

public class MainActivity extends AppCompatActivity {

private ListView mListView;
private List<Project> projects = new ArrayList<>();
private ProgressDialog progressDialog;


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

    mListView = (ListView) findViewById(R.id.listView);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Loading....");
    progressDialog.setCancelable(false);

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);
        }
    });

    Button mFilterButton = (Button) findViewById(R.id.filter_button);
    mFilterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popupMenu = new PopupMenu(MainActivity.this,v);
            popupMenu.inflate(R.menu.filter_menu);
            popupMenu.show();

        }
    });

    Button mSortButton = (Button) findViewById(R.id.sort_button);
    mSortButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popupMenu = new PopupMenu(MainActivity.this,v);
            popupMenu.inflate(R.menu.sort_menu);
            popupMenu.show();
        }
    });

    new GSONExecution().execute();
}


private class GSONExecution extends AsyncTask<Void, Void, Boolean>{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog.show();
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        String urlString = "http://starlord.hackerearth.com/kickstarter";

        try {
            URL url = new URL(urlString);

            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            int res = httpURLConnection.getResponseCode();

            if (res == 200){
                InputStream inputStream = httpURLConnection.getInputStream();
                String s = convertStreamToString(inputStream);
                Log.v("Response :" , " is "+ s);

                JSONObject rootObject = new JSONObject(s);
                JSONArray jsonArray = rootObject.getJSONArray("");

                for (int i=0; i<=jsonArray.length(); i++){
                    JSONObject contactObject = jsonArray.getJSONObject(i);

                    String titleValue = contactObject.getString("title");
                    Integer pledgedValue = contactObject.getInt("amt.pledged");
                    Integer backersValue = contactObject.getInt("num.backers");

                    Project project = new Project();
                    project.setPleadges(pledgedValue);
                    project.setBackers(backersValue);
                    project.settitle(titleValue);
                    projects.add(project);

                    Log.v("Object details : " , " : " + pledgedValue + " : " + backersValue);
                }
            }
        } catch (IOException | JSONException e) {
            e.printStackTrace();
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean isOperationCompleted) {
        super.onPostExecute(isOperationCompleted);
        if (isOperationCompleted){
            if (progressDialog.isShowing()){
                progressDialog.dismiss();
            }
            ProjectAdapter adapter = new ProjectAdapter(MainActivity.this, projects);
            mListView.setAdapter(adapter);
        }
    }

    @NonNull
    private String convertStreamToString(InputStream inputStream) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"),8);
            String line;
            while ((line = bufferedReader.readLine()) != null)
                stringBuilder.append(line).append("\n");
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
}
}

Project

public class Project {

String mtitle;
Integer mPleadges;
Integer mBackers;
String mNoDays;

public String gettitle() {
    return mtitle;
}

public void settitle(String mtitle) {
    this.mtitle = mtitle;
}

public Integer getPleadges() {
    return mPleadges;
}

public void setPleadges(Integer mPleadges) {
    this.mPleadges = mPleadges;
}

public Integer getBackers() {
    return mBackers;
}

public void setBackers(Integer mBackers) {
    this.mBackers = mBackers;
}

public String getNoDays() {
    return mNoDays;
}

public void setNoDays(String mNoDays) {
    this.mNoDays = mNoDays;
}
}

ProjectAdapter

class ProjectAdapter extends BaseAdapter{

private List<Project> mList;
private Context mContext;

public ProjectAdapter(MainActivity mainActivity, List<Project> projects) {

    this.mList = projects;
    this.mContext = mainActivity;
}

@Override
public int getCount() {
    return mList.size();
}

@Override
public Object getItem(int position) {
    return mList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.project_details,null,false);

    final TextView projectName = (TextView) convertView.findViewById(R.id.projectName);
    TextView pleadge = (TextView) convertView.findViewById(R.id.pledges);
    TextView backers = (TextView) convertView.findViewById(R.id.backers);

    projectName.setText(mList.get(position).gettitle());
    pleadge.setText(mList.get(position).getPleadges());
    backers.setText(mList.get(position).getBackers());

    return convertView;
}

}

I am getting org.json.JSONException: Value at org.json.JSON.typeMismatch(JSON.java:111)

I hope you understand problem, I am still in learning stage so please give brief answer so that i can understand.

3
  • show your json api response Commented Aug 14, 2017 at 5:43
  • It looks like you are not parsing the response correctly. Share your JSON response. Commented Aug 14, 2017 at 5:48
  • Check below answer Commented Aug 14, 2017 at 6:05

1 Answer 1

2

You are getting JSONArray from Response and trying to hold on JSONObject which causes org.json.JSONException: Value at org.json.JSON.typeMismatch(JSON.java:111) error

Try this

try {
    JSONArray jsonArrayLST = new JSONArray(s);
    for (int i = 0; i < jsonArrayLST.length(); i++) {
        JSONObject contactObject= jsonArrayLST.getJSONObject(i);

        String titleValue = contactObject.getString("title");
        Integer pledgedValue = contactObject.getInt("amt.pledged");
        Integer backersValue = contactObject.getInt("num.backers");

        Project project = new Project();
        project.setPleadges(pledgedValue);
        project.setBackers(backersValue);
        project.settitle(titleValue);
        projects.add(project);

        Log.v("Object details : " , " : " + pledgedValue + " : " + backersValue);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

Also, you need to change in your adapter while setting item to textview, because your are setting int value which causes you android.content.res.Resources$NotFoundException: String resource ID error

pleadge.setText(String.valueOf(mList.get(position).getPleadges()));
backers.setText(String.valueOf(mList.get(position).getBackers()));
Sign up to request clarification or add additional context in comments.

5 Comments

Now the app is crashing. Getting FATAL EXCEPTION, Resources$NotFoundException at pleadge.setText(mList.get(position).getPleadges()); in adapter
Use pleadge.setText(String.valueOf(mList.get(position).getPleadges()));
You are setting int value to textview which is throwing error android.content.res.Resources$NotFoundException: String resource ID
@R.H I have made changes for your adapter as well check the answer
Yes, got it. Thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.