2013-03-15 3 views
1

Я начинаю программировать на Java, я пытаюсь загрузить результат php в spinner, и у меня возникла проблема JSONObject, которая не может быть преобразована в JSONArray. У меня есть поиск на веб-сайте, чтобы попытаться преобразовать его, но я не могу его исправить. Результатphp android spinner - JSONObject не может быть преобразован в JSONArray

PHP:

{"ref_product_types":[{"product_type_code":"1","product_type_description":"Mobile Phone"},{"product_type_code":"2","product_type_description":"Toys"}]} 

я добавил это в проявленном

<uses-permission android:name="android.permission.INTERNET"/> 

здесь есть код Java:

package com.example.spinnert1; 

public class Main extends Activity { 

InputStream is=null; 
String result=null; 
String line=null; 

String[] product_type_code, product_type_description; 

Spinner spinner1,spinner2; 



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

spinner1 = (Spinner) findViewById(R.id.spinner1); 
spinner2 = (Spinner) findViewById(R.id.spinner2); 
final List<String> list1 = new ArrayList<String>(); 
final List<String> list2 = new ArrayList<String>(); 

Button b=(Button) findViewById(R.id.button1); 

b.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) 
{ 
       // TODO Auto-generated method stub 

try 
{ 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://10.0.2.2/epos_connect/get_all_product_type.php"); 
HttpResponse response = httpclient.execute(httppost); 
Log.e("Fail 1", "3"); 

HttpEntity entity = response.getEntity(); 
Log.e("Fail 1", "4"); 

is = entity.getContent(); 
Log.e("Pass 1", "connection success "); 
} 
catch(Exception e) 
{ 
Log.e("Fail 1", e.toString()); 
Toast.makeText(getApplicationContext(), "Invalid IP Address",Toast.LENGTH_LONG).show(); 
finish(); 
}  


try 
{ 
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
StringBuilder sb = new StringBuilder(); 
while ((line = reader.readLine()) != null) 
{ 
sb.append(line + "\n"); 
} 
is.close(); 
result = sb.toString(); 
} 
catch(Exception e) 
{ 
Log.e("Fail 2", e.toString()); 
}  


try 
{ 
JSONArray JA=new JSONArray(result); 


JSONObject json= null; 
product_type_code = new String[JA.length()];  
product_type_description = new String[JA.length()]; 

for(int i=0;i<JA.length();i++) 
{ 
json=JA.getJSONObject(i); 
product_type_code[i] = json.getString("product_type_code"); 
product_type_description[i]=json.getString("product_type_description"); 
} 
Toast.makeText(getApplicationContext(), "sss",Toast.LENGTH_LONG).show(); 

for(int i=0;i<product_type_code.length;i++) 
{ 
list1.add(product_type_code[i]); 
list2.add(product_type_description[i]); 
} 

spinner_fn(); 

} 
catch(Exception e) 
{ 

Log.e("Fail 3", e.toString()); 
//login.this.finish(); 

} 
} 
}); 

} 
private void spinner_fn() { 
    // TODO Auto-generated method stub 

    ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(getApplicationContext(), 
            android.R.layout.simple_spinner_item, product_type_code); 
    dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner1.setAdapter(dataAdapter1); 


    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(getApplicationContext(), 
            android.R.layout.simple_spinner_item, product_type_description); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner2.setAdapter(dataAdapter2); 


    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1,int position, long id) 
    { 
    // TODO Auto-generated method stub 

    spinner2.setSelection(position); 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) 
    { 
    // TODO Auto-generated method stub 
    } 

    }); 


    spinner2.setOnItemSelectedListener(new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1,int position, long arg3) { 
    // TODO Auto-generated method stub 

    spinner1.setSelection(position); 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 
    } 
    }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
    } 

    } 

расположение XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:entries="@array/country_arrays" 
    android:prompt="@string/country_prompt" /> 

<Spinner 
    android:id="@+id/spinner2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<Button 
    android:id="@+id/btnSubmit" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Submit" /> 

</LinearLayout> 

thanks

+0

похожи или дублировать: http://stackoverflow.com/questions/4244879/reading-a-json-array-in-android – maszter

ответ

1

Похоже, что данные, которые возвращаются, действительно являются объектом JSON, а не массивом JSON; массив JSON вложен в внешние объекты в ключ «ref_product_types».

Вы хотите использовать что-то вроде:

JSONObject jsonObj = new JSONObject(result); 
JSONArray ja = jsonObj.getJSONArray("ref_product_types") 
+0

Fix! Благодарим за быстрый ответ. – kenchi123

1
{ 
    "ref_product_types": [ 
          {"product_type_code":"1", 
          "product_type_description":"Mobile Phone" 
          }, 
          {"product_type_code":"2", 
          "product_type_description":"Toys" 
          } 
         ] 
} 

Так я сделал небольшое форматирование, чтобы вы видите это ясно.

Итак сначала вы должны знать, что мультимножеством скобка { указывает JSONObject и кронштейн [ указывает JSONArray. Таким образом, ваша строка представляет JSONObject и хранит JSONArray. Поэтому вам нужно сначала создать новый JSONObject, а затем разобрать JSONArray.

JSONObject o = new JSONObject(sourceString); 
JSONArray arr = o.getJSONArray("ref_product_types"); 
+0

Ничего себе, спасибо за объяснение, спасибо вам, я понимаю, как исправить это сейчас – kenchi123

+0

Добро пожаловать :) – Sajmon

Смежные вопросы