آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با نمایش اطلاعات دیتابیس آنلاین در لیست ویو

alfredo  9 سال پیش  9 سال پیش
0 0

سلام به همه دوستای خوبم.

من یک سورس آماده از اینترنت گرفتم که اطلاعات جی سون واقع در یک url و توی یک لیست ویوی ساده نشون میده که کاستوم ادپتر هم نیست...

مشکل من اینه که وقتی آدرس url رو به آدرس خودم تغییر میدم با کرش مواجه میشم چون json من مدلش با json دیفالت خود پروژه فرق داره.

فرقش اینه که json اون اسم داره و آرایه اطلاعات زیر مجموعه اون اسم هستند ولی json من مستقیما آرایه ها داخلش هستند و هیچ اسمی نداره. یعنی به یکی از json ها میگن ArrayJson و به یکی دیگشون میگن ObjectJson ولی من نمیدونم مال من کدوم میشه.

این کدهای اون پروژه هست که گرفتم.

public class MainActivity extends Activity {
	ListView list;
	TextView ver;
	TextView name;
	TextView api;
	Button Btngetdata;
	ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
	
	//URL to get JSON Array
	private static String url = "http://api.learn2crack.com/android/jsonos/";
	
	//JSON Node Names 
	private static final String TAG_OS = "android";
	private static final String TAG_VER = "ver";
	private static final String TAG_NAME = "name";
	private static final String TAG_API = "api";
	
	JSONArray android = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        setContentView(R.layout.activity_main);
        oslist = new ArrayList<HashMap<String, String>>();

        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View view) {
		         new JSONParse().execute();	
			}
		});
    }

    
    private class JSONParse extends AsyncTask<String, String, JSONObject> {
    	 private ProgressDialog pDialog;
    	@Override
        protected void onPreExecute() {
            super.onPreExecute();
             ver = (TextView)findViewById(R.id.vers);
			 name = (TextView)findViewById(R.id.name);
			 api = (TextView)findViewById(R.id.api);
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();            
    	}
    	
    	@Override
        protected JSONObject doInBackground(String... args) {
    		
    		JSONParser jParser = new JSONParser();

    		// Getting JSON from URL
    		JSONObject json = jParser.getJSONFromUrl(url);
    		return json;
    	}
    	 @Override
         protected void onPostExecute(JSONObject json) {
    		 pDialog.dismiss();
    		 try {
    				// Getting JSON Array from URL
    				android = json.getJSONArray(TAG_OS);
    				for(int i = 0; i < android.length(); i++){
    				JSONObject c = android.getJSONObject(i);
    				
    				// Storing  JSON item in a Variable
    				String ver = c.getString(TAG_VER);
    				String name = c.getString(TAG_NAME);
    				String api = c.getString(TAG_API);
    				
    				// Adding value HashMap key => value
    				
    				HashMap<String, String> map = new HashMap<String, String>();

    				map.put(TAG_VER, ver);
    				map.put(TAG_NAME, name);
    				map.put(TAG_API, api);
    				
    				oslist.add(map);
    				list=(ListView)findViewById(R.id.list);
    			
    				ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist,
    						R.layout.list_v,
    						new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] {
    								R.id.vers,R.id.name, R.id.api});

    				list.setAdapter(adapter);
    				list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    		            @Override
    		            public void onItemClick(AdapterView<?> parent, View view,
    		                                    int position, long id) {
    		                Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();

    		            }
    		        });

    				}
    		} catch (JSONException e) {
    			e.printStackTrace();
    		}

    		     	 }
    }

 

+1 0
ببنید اگر آرایه به شکل دوتایی باشه یعنی به هر عنصر آرایه اسم بدیم میشه JsonObject و اگر بهش اسم ندیم و مثل جاوا آرایه تعریف کنیم بهش میگن JsonArray (9 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
alfredo  9 سال پیش
0 0

الان اون تیکه از کد که اطلاعات رو دریافت میکرد تغییر دادم به این:

  android = json.getJSONArray(0);
                for (int i = 0; i < android.length(); i++) {
                    JSONObject c = android.getJSONObject(i);

                    // Storing  JSON item in a Variable
                    String ver = c.getString(TAG_VER);
                    String name = c.getString(TAG_NAME);

ولی ارور Json Parsing data میده

پاسخ به سوال 
یاسر   9 سال پیش
+2 0

در قسمت doInBackground شما بیا بجای JSONObject از JSONArray استفاده کن

              	@Override
protected JSONObject doInBackground(String... args) { JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONArray json = jParser.getJSONFromUrl(url); return json; }

 

0 0
به ریترن ایراد میگیره میگه Type mismatch: cannot convert from JSONArray to JSONObject (9 سال پیش)
0 0
ارورش با کمی کلنجار رفع شد. الان روی این خط کرش میکنه برنامه android = json.getJSONArray(0); (9 سال پیش)
پاسخ به سوال 
alfredo  9 سال پیش
0 0

یک کد جدید پیدا کردم که میتونه اطلاعاتم رو دریافت کنه و در تسکت ویو نشون بده.

با اون کد بالایی ادغامش کردم و درست شد ! D:

این کدش هست:

 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectAll()
                .penaltyLog()
                .penaltyDialog()
                .build());

        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll()
                .penaltyLog()
                .build());

        TextView wid = (TextView) findViewById(R.id.wid);
        TextView name = (TextView) findViewById(R.id.name);
        TextView url = (TextView) findViewById(R.id.url);

        JSONObject json = null;
        String str = "";
        HttpResponse response;
        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://Ulection.tk/service.php?action=select");

        try {
            response = myClient.execute(myConnection);
            str = EntityUtils.toString(response.getEntity(), "UTF-8");

        }
        catch (ClientProtocolException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        try {
            JSONArray jArray = new JSONArray(str);
            json = jArray.getJSONObject(0);

            wid.setText(json.getString("id"));
            name.setText(json.getString("subject"));
            url.setText(json.getString("text"));

        }
        catch (JSONException e) {
            e.printStackTrace();
        }

    }
0 0
از همه متشکرم. (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .