JSON을 회 전자에 채우려하고 있지만 실패했습니다. 그리고 오류는 항상 KatArtcAdapter -> getView를 가리키고 치명적인 오류가 항상 표시됨 ArrayAdapter는 리소스 ID가 TextView 여야 함을 나타냅니다. 내 실수를 찾아 내도록 도와 주시겠습니까? 고급Json을 Android의 Spinner에 채우기
에 KatArtcAdapter.java
public class KatArtcAdapter extends ArrayAdapter<KategoriArt> {
private Activity context;
ArrayList<KategoriArt> data = null;
public KatArtcAdapter(Activity context, int resource,ArrayList<KategoriArt> data) {
super(context, resource, data);
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return super.getView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.spinner_item, parent, false);
}
KategoriArt item = data.get(position);
if (item != null) { // Parse the data from each object and set it.
TextView KatId = (TextView) row.findViewById(R.id.item_id);
TextView KatName = (TextView) row.findViewById(R.id.item_value);
if (KatId != null) {
KatId.setText(item.getIdKat());
}
if (KatName != null) {
KatName.setText(item.getName());
}
}
return row;
}
}
MainActivity.Java
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,
RecyclerItemClickListener.OnItemClickListener{
artikelAdapter mGridadapter;
JSONParser jParser= new JSONParser();
JSONArray names=null;
private static final String URL_READ_KAT= "http://amobipets.azurewebsites.net/readKategoriArticle.php";
private static final String TAG_PESAN = "message";
private static final String TAG_HASIL = "result";
private static final String TAG_ID_KAT = "id";
private static final String TAG_KAT= "kategori";
Spinner katyField;
ArrayList<KategoriArt> katList = new ArrayList<KategoriArt>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
katyField =(Spinner) findViewById(R.id.spinner);
new buildKatDropDown().execute();
katyField.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
KategoriArt selectedKat=katList.get(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public class buildKatDropDown extends AsyncTask<String,String,String> {
int sukses=0;
public buildKatDropDown() {
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
try
{
JSONObject json = jParser.makeHttpRequest(URL_READ_KAT, "GET", params);
if(json != null)
{
sukses = json.getInt(TAG_PESAN);
if(sukses == 1)
{
nameList = new ArrayList<HashMap<String,String>>();
Log.d("Semua Nama: ", json.toString());
names = json.getJSONArray(TAG_HASIL);
for(int i = 0; i < names.length();i++)
{
JSONObject c = names.getJSONObject(i);
String id = c.getString(TAG_ID_KAT);
String kategori = c.getString(TAG_KAT);
katList.add(new KategoriArt(id,kategori));
}
}
}
}catch(JSONException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
if(sukses==1)
{
KatArtcAdapter ktAdapter=new KatArtcAdapter(MainActivity.this,R.layout.spinner_item,katList);
katyField.setAdapter(ktAdapter);
}
}
}
}
스택 트레이스
을 주셔서 감사합니다06-19 21 : 26 : 44.328 21749-21904/com.amobi.newlomapodfix D/url : http://amobipets.azurewebsites.net/readKategoriArticle.php? 06-19 21 : 26 : 44.375 21749-21867/com.amobi.newlomapodfix E/표면 : getSlotFromBufferLocked : 알 수없는 버퍼 : 0xaaaa97d0 06-19 21 : 26 : 44.428 21749-21749/com.amobi.newlomapodfix W/설정 : airplane_mode_on을 설정하면 android.provider.Settings.System에서 android.provider.Settings.Global, (으)로 읽기 전용 값이 반환되었습니다. 06-19 21 : 26 : 44.493 21749-21904/com.amobi.newlomapodfix I/info : [email protected] 06-19 21 : 26 : 44.494 21749-21904/com. amobi.newlomapodfix D/Semua Nama :: { "결과": [{ "id": "11", "kategori": "안징"}, { "id": "21", "kategori": "Kucing" }, { "id": "31", "kategori": "Hamster"}, { "id": "41", "kategori": "Reptil"}], "message": 1} 06-19 21 : 26 : 44.704 21749-21749/com.amobi.newlomapodfix E/ArrayAdapter : TextView에 대한 리소스 ID를 제공해야합니다. 06-19 21 : 26 : 44.709 21749-21749/com.amobi.newlomapodfix D/AndroidRuntime : 시스템 종료 VM 06-19 21 : 26 : 44.728 21749-21749/com.amobi.newlomapodfix E/AndroidRuntime : FATAL 예외 : 주 프로세스 : com.amobi.newlomapodfix, PID : 21749 java.lang.IllegalSta teException는 : ArrayAdapter와는 COM에 android.widget.ArrayAdapter.getView (ArrayAdapter.java:369) 에서 android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:393) 에서 텍스트 뷰 될 자원 ID 필요하다. android.widget.Spinner.onMeasure (Spinner.java:580) 에서 android.widget.AbsSpinner.onMeasure (AbsSpinner.java:194) 에서 amobi.newlomapodfix.adapter.KatArtcAdapter.getView (KatArtcAdapter.java:30)에서 android.support.v7.widget.AppCompatSpinner.onMeasure (AppCompatSpinner.java:418) android.view.View.m android.view.View.measure에서 android.widget.FrameLayout.onMeasure (FrameLayout.java:194) 에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 easure (View.java:18788) (android.view.View.measure에서 android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:715) android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) 에서 에서 View.java:18788) (보기 된 .java : 18788) android.support.design.widget.CoordinatorLayout에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 . android.support.design.widget.AppBarLayout $ ScrollingViewBehavior.onMeasureChild (AppBarLayout.java에서 onMeasureChild android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild (HeaderScrollingViewBehavior.java:90)에서 (CoordinatorLayout.java:664) : android.support.v4.widget에서 android.view.View.measure에서 android.support.design.widget.CoordinatorLayout.onMeasure (CoordinatorLayout.java:729) (View.java:18788) 에서 1,149) . DrawerLayout.onMeasure (DrawerLayout.java:1075) android.view.View.measure (View.java:18788) android.support.v7.widget.ContentFrameLayout.onMeasure에서 android.widget.FrameLayout.onMeasure에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) (FrameLayout.java:194) (ContentFrameLayout.java에서 : android.widget.LinearLayout.measureChildBeforeLayout에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) (LinearLayout.java:1465 135) android.view.View.measure (View.java:18788에서 ) ) android.widget.LinearLayout.measureVertical (LinearLayout.java:748) android.widget.LinearLayout.onMeasure (LinearLayout.java:630)android.widget.FrameLayout.onMeasure에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 android.view.View.measure (View.java:18788) (FrameLayout.java:194) 에서에서 로이드에서 android.view.View.measure android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465)에서 (View.java:18788) android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951)에서 .widget.LinearLayout.measureVertical (LinearLayout.java:748) android.widget.LinearLayout.onMeasure (LinearLayout.java:630) 에서 android.widget.FrameLayout.onMeasure (FrameLayout.java:194) 에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 android.view.View.measure (View.java:18788)에서 com.android.internal.policy.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2643) android.view.View.View.measure (View.java:18788)에서 android.view.ViewRootImpl.performMeasure (ViewRootImpl.java : 2100) android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1216) at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1452) at android.view.ViewRootImpl.do android.view.Choreographer $ CallbackRecord.run (Choreographer.java:858) 안드로이드에서 에서 android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6013) 에서 순회 (ViewRootImpl.java:1107) . 안드로이드에서 android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:844) 에서 android.view.Choreographer.doFrame (Choreographer.java:606) 에서 view.Choreographer.doCallbacks (Choreographer.java:670) .os.Handler.handleCallback (Handler.java:739) android.os.Handler.dispatchMessage (Handler.java : 95) android.os.Looper.loop (Looper.java:148) at android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (네이티브 메소드) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726)
편집에서
Spinner_item.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="wrap_content"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/item_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.43">
</TextView>
<TextView
android:id="@+id/item_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_weight="0.10">
</TextView>
</LinearLayout>
'R.layout.spinner_item'을 표시 할 수 있습니까? –
예 @ShreeKrishna –
하나의 TextView 만 사용해 보셨습니까? 문제는 여전히 제기되고 있습니까? –