Ich habe eine JSON-Datei in meinem localhost und ich versuche, alle seine Daten auf meiner Android-Anwendung mit Volley Requests zu holen. Jetzt, während ich versuche, meine analysierten Daten (mit JSON) zu holen, habe ich einige unbekannte Fehler! Ich verwende meinen Emulator, um meine Anwendung zu testen.Android Volley-Fehler beim Abrufen von JSON-Daten
hier ist meine JSON-Datei:
{"dolaaye_posts":[{"id":"1","post_subject":"salam","post_desc":"salam"},{"id":"2","post_subject":"????","post_desc":"????"}],"success":1}
hier ist mein MainActivity.java:
package ir.dolaaye;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.android.volley.AuthFailureError;
import com.android.volley.Cache;
import com.android.volley.NetworkError;
import com.android.volley.NoConnectionError;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
public class MainActivity extends AppCompatActivity {
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/
private SectionsPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
////////start of Volley Request///////////////
String tag_json_array = "tag_json_array";
/**
* @url = Url for get json Object
*/
String url = "http://10.0.2.2:1378/scripts/dolaaye/posts.json";
/**
* Show Progress Dialog
* Before Get Data From Server
* Or
* Get Error From Server
*/
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("در حال جمع آوری اطلاعات...");
pDialog.show();
/**
* Create Request For Get Json Array From Server
*
* Exist To Method In The Request :
* 1 : onResponse => That Get Response For Server
* If Data Exist In The Server
*
* 2 : onErrorResponse => That Show Error
* If Data Do Not Exist In The Server
*/
JsonArrayRequest jsonArrReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
Log.e("LOG", jsonArray.toString());
for (int i = 0 ; i < jsonArray.length() ; i++)
{
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i("LOG", "object : " + jsonObject.getString("id"));
} catch (JSONException e) {
e.printStackTrace();
}
}
pDialog.hide();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
VolleyLog.e("VolleyError", volleyError.getMessage());
if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) {
VolleyLog.e("VolleyError", volleyError.getMessage());
} else if (volleyError instanceof AuthFailureError) {
//TODO
} else if (volleyError instanceof ServerError) {
//TODO
} else if (volleyError instanceof NetworkError) {
//TODO
} else if (volleyError instanceof ParseError) {
//TODO
}
pDialog.hide();
}
});
Cache cache = G.getInstance().getRequestQueue().getCache();
Cache.Entry entry = cache.get(url);
if (entry != null){
try {
String data = new String(entry.data, "UTF-8");
Log.i("LOG",data);
pDialog.hide();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else {
}
G.getInstance().addToRequestQueue(jsonArrReq,tag_json_array);
////end of Volley Request //////////////////////////////////
}
}
I INTERNET-ZULASSUNG und ACCESS_NETWORK_STATE meinem Manifest gesetzt haben. Hier ist mein Logcat:
08-23 13:33:49.767 22388-22388/ir.dolaaye E/Volley: [1] 2.onErrorResponse: VolleyError
Ich weiß nicht warum!
Sie erhalten JSONObject als Antwort und in Ihrem Code Sie behandelt JSONArray. – KishuDroid
Überprüfen Sie hier, wie Sie eine Array- oder Objektanfrage richtig machen - http://www.androidhive.info/2014/05/android-working-with-volley-library-1/ – Tasos