这个问题在这里已经有答案了:
org.json.jsonarray无法转换为jsonobject(5个答案)
上个月关门了。
我一直在犯这个错误。我得到了错误 JSONArray
无法转换为 JSONObject
. 我已经解析了包含对象数组的json文件,但是仍然得到这个错误。代码如下:
java代码:
public class DetailActivity extends AppCompatActivity {
ImageView imageView;
TextView options, bio, noBio;
private final String JSON_URL = "https://run.mocky.io/v3/987b97bd-6895-40d1-9d37-ce404162c491";
private JsonObjectRequest jsonObjectRequest;
private RequestQueue requestQueue;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().setTitle("");
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
imageView = (ImageView) findViewById(R.id.iv_image);
options = (TextView) findViewById(R.id.tv_options);
bio = (TextView) findViewById(R.id.tv_bio);
noBio = (TextView) findViewById(R.id.tv_no_bio);
getDetails();
}
private void getDetails() {
jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, JSON_URL,null ,new Response.Listener<JSONObject>() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = new JSONArray(response.toString());
for (int i = 0; i<jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String type = jsonObject.getString("type");
boolean isVisible = jsonObject.getBoolean("isVisible");
if (!isVisible){
imageView.setVisibility(View.GONE);
options.setText("API response is false. So data will not be shown.");
bio.setText("API response is false. So data will not be shown.");
}
else{
imageView.setVisibility(View.VISIBLE);
options.setVisibility(View.VISIBLE);
bio.setVisibility(View.VISIBLE);
Intent intent = getIntent();
Glide.with(getApplicationContext()).load((Bitmap) intent.getParcelableExtra("image")).into(imageView);
options.setText("Choosen Option : " + getIntent().getStringExtra("options"));
String str_bio = getIntent().getStringExtra("comments");
if (str_bio == null){
bio.setVisibility(View.GONE);
noBio.setVisibility(View.VISIBLE);
}
else{
bio.setText("Bio : " + str_bio);
noBio.setVisibility(View.GONE);
}
}
}
} catch (JSONException e) {
Toast.makeText(DetailActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("Exception", e.getMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(DetailActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("Error", error.getMessage());
}
});
requestQueue = Volley.newRequestQueue(DetailActivity.this);
requestQueue.add(jsonObjectRequest);
}
}
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0E6FD"
android:orientation="vertical"
tools:context=".DetailActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="15dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp">
<ImageView
android:id="@+id/iv_image"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/tv_options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Choosen option : "
android:textSize="17dp"
android:fontFamily="@font/notoserif_bold"
android:layout_marginTop="15dp"
android:textColor="@color/black"/>
<TextView
android:id="@+id/tv_bio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bio :"
android:textSize="17dp"
android:fontFamily="@font/notoserif_bold"
android:layout_marginTop="15dp"
android:textColor="@color/black"/>
<TextView
android:id="@+id/tv_no_bio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="No Bio provided"
android:gravity="center"
android:textSize="15dp"
android:fontFamily="@font/notoserif_regular"
android:layout_marginTop="15dp"
android:textColor="@color/black"/>
</LinearLayout>
以下是json文件:
[
{
"type":"PHOTO",
"isVisible":true
},
{
"type":"SINGLE_CHOICE",
"isVisible":true
},
{
"type":"COMMENT",
"isVisible":true
}
]
1条答案
按热度按时间tvokkenx1#
编写这样的代码来提取json:
从服务器获得响应后的java文件代码:
结果: