بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

خطای عجیب در گرفتن json

مدیریت گفتگو
Amin 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام
من در سرچ برنامم به مشکل خوردم
طرز کار هم اینطوریه که کاربر نام رو مینویسه و دسته بندی رو انتخاب میکنه و جستجو رو میزنه


حالا با استفاده از کتابخانه volley درخواستی به سمت سرور میفرسته و درخواست رو پردازش میکنه و مقادیر رو برمیگردونه
مشکل من اینه که مقادیر برگشتی به شکلی نامفهوم هستن

کد اندروید:

public class AppSearchList extends AppCompatActivity {

private ListView Applist;
private AdapterApp adapterApp;
private ArrayList<StructApp> apps=new ArrayList<StructApp>();
private ProgressDialog pDialog;

private String Name;
private int CategoryId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_search_list);

Bundle extras=getIntent().getExtras();
try{
Name=extras.getString("SEARCH_NAME");
CategoryId=extras.getInt("SEARCH_CATEGORY");
}catch (Exception e)
{
e.printStackTrace();
}

//set listview
Applist=(ListView) findViewById(R.id.AppSearchlist);
adapterApp=new AdapterApp(this,apps);
Applist.setAdapter(adapterApp);

pDialog = new ProgressDialog(this);
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();

// Creating volley request obj
StringRequest appsearchRequest = new StringRequest(Request.Method.POST, GlobalVariables.readSearchUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.i("read from json",s);
/*
try {
JSONArray array = new JSONArray(s);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
StructApp app = new StructApp();
app.setName(obj.getString("APP_NAME"));
app.setCost(obj.getInt("APP_PRICE"));
app.setIconUrl(obj.getString("APP_ICON"));
app.setRatingValue((float) obj.getDouble("APP_VOTE"));

apps.add(app);
}

hidePDialog();

adapterApp.notifyDataSetChanged();

} catch (JSONException e)
e.printStackTrace();
hidePDialog();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//Dismissing the progress dialog
hidePDialog();
//Showing toast
Toast.makeText(G.context, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {

Map<String, String> searchParam = new HashMap<String, String>();
searchParam.put("AppFilter","app.APP_NAME=" +"\"" +Name+"\"");
searchParam.put("CategoryFilter","app.CAT_ID=" +"\"" +CategoryId+"\"");

return searchParam;
}
};

// Adding request to request queue
G.getInstance().addToRequestQueue(appsearchRequest);



@Override
public void onDestroy() {
super.onDestroy();
hidePDialog();
}
private void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
}

کد php :

function readSearch()
{
    $coonection=connectToDatabase();
    $result=mysqli_query($coonection, "SELECT app.APP_NAME,app.APP_ICON,app.APP_VOTE,app.APP_PRICE FROM app INNER JOIN category ON app.CAT_ID = category.CAT_ID WHERE" . $_REQUEST['AppFilter'] . "AND" . $_REQUEST['CategoryFilter']);
    $output=array();
    if(isset($result)){
         while($row=mysqli_fetch_array($result))
    {
        $record=array();
        $record['APP_NAME']=$row['APP_NAME'];
        $record['APP_ICON']=$row['APP_ICON'];
        $record['APP_VOTE']=$row['APP_VOTE'];
        $record['APP_PRICE']=$row['APP_PRICE'];
      
        $output[]=$record;
    }
    echo json_encode($output);
    mysqli_close($coonection);
    }
}

این هم از logcat :

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

نظرات

Spirit 10 سال پیش
با توجه log ی گذاشتید خروجی تون درست نیست یعنی اصلا json ی درکار نیست، بهتره اول از کارکرد وب سرویس با تست کردن در مرورگر و افزونه هایی مثل postman مطمئن بشید بعد تو پروژه استفاده کنید.
Amin 10 سال پیش
خیلی ممنون از راهنماییتون آقای نصرتی.علت خروجی صحیح نگرفتن رو فهمیدم اما من باید از سمت اندروید 2 پارمتر ارسال کنم تا کوئری کامل بشه!یعنی نحوه ارسال پارمتر ها اشتباهه؟نحوه صحیحش رو توضیح می دید؟لطف میکنید اگر پاسخ بدید
Hossein Lamei Ramandi 10 سال پیش
اینجوری معلوم نمیشه کد های کامل پی اچ پی تون و آدرس فایل رو بفرستدی

پاسخ‌ها 1

Amin 10 سال پیش

یکسری تغییرات تو کدها دادم که اون ارور رو از بین برد ولی همچنان مقدار جیسون خالیه

searchParam.put("appfilter", "\"" + Name + "\"");
Log.i("LOG", "\"" + Name + "\"");
searchParam.put("catidfilter", "\"" + CategoryId + "\"");
Log.i("LOG", "\"" + CategoryId + "\"");
I/LOG﹕ "instagram"
I/LOG﹕ "2"
I/read from json﹕ []

کد php :

function readSearch()
{
    $coonection=connectToDatabase();
    //$_REQUEST['appfilter']="instagram";
    //$_REQUEST['catidfilter']="2";
    $result=mysqli_query($coonection, "SELECT app.APP_NAME,app.APP_ICON,app.APP_VOTE,app.APP_PRICE
FROM app INNER JOIN category ON app.CAT_ID = category.CAT_ID WHERE
app.APP_NAME= '" . $_REQUEST['appfilter'] . "' AND app.CAT_ID=" . $_REQUEST['catidfilter']); $output=array(); if(isset($result)){ while($row=mysqli_fetch_array($result)) { $record=array(); $record['APP_NAME']=$row['APP_NAME']; $record['APP_ICON']=$row['APP_ICON']; $record['APP_VOTE']=$row['APP_VOTE']; $record['APP_PRICE']=$row['APP_PRICE']; $output[]=$record; } echo json_encode($output); mysqli_close($coonection); } }

این رو هم بگم وقتی کامنت های کد بالا رو (علامت //) برمیدارم جیسون صحیح بهم میده :

[{"APP_NAME":"Instagram","APP_ICON":"http:\/\/192.168.1.36\/AppStore-server\/Icon\/instagram.png","APP_VOTE":"3.7","APP_PRICE":"0"}]

نظرات

Amin 10 سال پیش
دوستان یه راهنمایی نمیکنید؟!
Spirit 10 سال پیش
شما باید خط به خط از صحت کدهاتون مطمئن بشید، POST_$ رو با تابع print_r چاپ کنید ببینید اصلا مواردی که ارسال میکنید به صفحه ارسال میشن یا نه.

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